Tymczasowo zmień czas

18

Muszę przetestować aspekty mojego oprogramowania, które występują tylko w określonych porach dnia. Zamiast czekać całe dni (i dotrzeć tutaj o 2:00 rano), chciałbym zmienić godzinę.

Ale wolałbym nie zmieniać tego na stałe .

Wiem, że mogę zmienić czas za pomocą date, a następnie zmienić go z powrotem, ale czy jest lepszy sposób?

System operacyjny, o którym mowa, to RHEL6 działający na maszynie wirtualnej.

John Dibling
źródło
Z tego powodu warto było mi chwilowo zmienić czas w mojej maszynie wirtualnej, ale nie miałem problemu z samodzielnym systemem. Warto przeczytać: Wyłącz synchronizację czasu w systemie Ubuntu
GrandAdmiral

Odpowiedzi:

24

Dostępna jest biblioteka o nazwie libfaketime(także na GitHub ), która umożliwia raportowanie systemu do aplikacji w określonym czasie. Możesz albo zgłosić systemowi określony czas trwania programu, albo uruchomić zegar o określonej godzinie (na przykład 01:59:30). Zasadniczo podpinasz bibliotekę faketime do obrazu programu w pamięci za pomocą modułu ładującego biblioteki, a on przechwytuje i obsługuje na swój sposób wszystkie wywołania systemowe związane z czasem systemowym. To nie dokładnie zmienić czas systemowy, ale zmienia się co czas jest zgłaszane do konkretnej aplikacji bez wpływu na cokolwiek innego, co działa, co jest chyba to, co naprawdę jesteś po (w przeciwnym razie, nie widzę żadnego powodu, aby nie tylko zmienić globalny czas systemu).

Istnieje wiele możliwych wariantów, jak go używać, ale wygląda na to, że zmiana czasu, o którym myśli, że proces ma miejsce w libfaketime, ma dość dokładną listę wraz z przykładowym kodem do wypróbowania. Google powinien również być w stanie odkryć niektóre przykłady, biorąc pod uwagę, że wiesz, czego szukać.

Wygląda na to, że nie jest dostępny w pakieciefaketime repozytoriów RHEL, ale na przykład Debian udostępnia go pod nazwą pakietu . Wygląda też na łatwą do zbudowania z kodu źródłowego (najwyraźniej nie wymaga nawet configurekroku ani niczego podobnego).

CVn
źródło
1
W żadnym repozytorium Fedora / CentOS / RHEL, które udało mi się znaleźć, nie ma takiej wstępnej wersji. Dostępna jest tutaj liczba obrotów na minutę, ale należy ją przebudować dla CentOS.
slm
@slm Szkoda, ale nie powinno to być trudne do zbudowania ze źródła (powiedział bez próbowania).
CVn
1
Nie, po prostu informowałem wszystkich, aby uratowali ich przed patrzeniem. Wygląda całkiem prosto.
slm
6

Chciałbym najpierw zainstalować ntpusługę synchronizującą czas ze zdalnym serwerem. Następnie zatrzymaj usługę, ręcznie zmień datę, pobaw się i uruchom ponownie usługę:

service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start
terdon
źródło
1
„O ile mi wiadomo, nie można zmienić czasu tylko jednego procesu, ponieważ dotyczy on całego systemu”. W rzeczywistości możesz w pewien sposób; zobacz moją odpowiedź.
CVn
2
@ MichaelKjörling rzeczywiście, ale moja wiedza w momencie pisania nie obejmowała twojej odpowiedzi. O ile wiedziałem, nie ma mowy :).
terdon
Opublikowałem swoją odpowiedź około 90 sekund przed opublikowaniem swojej. ;)
CVn
1
@ MichaelKjörling yup, a ja właściwie edytowałem mój (nie możesz tego zobaczyć, zrobiłem to zaraz po opublikowaniu, kiedy zobaczyłem twój), aby dodać „o ile wiem” :).
terdon