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.
Odpowiedzi:
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 pakiecie
faketime
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 nawetconfigure
kroku ani niczego podobnego).źródło
Chciałbym najpierw zainstalować
ntp
usługę synchronizującą czas ze zdalnym serwerem. Następnie zatrzymaj usługę, ręcznie zmień datę, pobaw się i uruchom ponownie usługę:źródło