Zeit vorübergehend ändern

18

Ich muss Aspekte meiner Software testen, die nur zu bestimmten Tageszeiten auftreten. Anstatt ganze Tage zu warten (und um 2 Uhr morgens hier zu sein), möchte ich die Zeit ändern.

Aber ich möchte es lieber nicht dauerhaft ändern .

Ich weiß, dass ich die Zeit mit dateund dann wieder zurück ändern kann, aber gibt es einen besseren Weg?

Das fragliche Betriebssystem ist RHEL6, das in einer VM ausgeführt wird.

John Dibling
quelle
Für das, was es wert ist, hatte ich Probleme, die Zeit in meiner VM vorübergehend zu ändern, aber ich hatte kein Problem mit einem eigenständigen System. Es könnte sich lohnen, dies zu lesen:
Deaktivieren

Antworten:

24

Es gibt eine Bibliothek mit dem Namen libfaketime(auch auf GitHub ), mit der Sie festlegen können, dass das System Ihrer Anwendung eine bestimmte Zeit meldet. Sie können entweder festlegen, dass das System eine feste Zeit für die Dauer der Programmausführung meldet, oder die Uhr zu einer bestimmten Zeit starten (z. B. 01:59:30). Grundsätzlich binden Sie die faketime-Bibliothek über den Bibliothekslader in das speicherinterne Image Ihres Programms ein und erfassen und verarbeiten alle Systemaufrufe, die sich auf die Systemzeit beziehen, auf eigene Weise. Es ist nicht genau ändern die Systemzeit, aber es ändert sich, was Zeit wird berichtet , um Ihre spezifische Anwendung ohne etwas anderes zu beeinflussen , die ausgeführt wird , was wahrscheinlich ist , was Sie wirklich nach sind (sonst, ich sehe keinen Grund, nicht nur die globale ändern Systemzeit).

Es gibt eine Reihe von möglichen Varianten, wie man es benutzt, aber es sieht so aus, als würde man die Zeit ändern, die ein Prozess mit libfaketime für wahrscheinlich hält. Google sollte auch in der Lage sein, einige Beispiele zu finden, vorausgesetzt, Sie wissen, wonach Sie suchen müssen.

Es scheint, dass es nicht vorab in den RHEL-Repositories verfügbar ist, aber Debian bietet esfaketime zum Beispiel unter dem Paketnamen an . Es sieht auch so aus, als würde es direkt aus dem Quellcode erstellt (es braucht anscheinend nicht einmal einen configureSchritt oder so etwas).

ein CVn
quelle
1
In keinem der Fedora / CentOS / RHEL-Repos, die ich finden konnte, gibt es eine vorgefertigte Version davon. Es gibt dieses RPM hier, aber es muss für CentOS neu erstellt werden.
SLM
@slm Schade, dass, aber es sollte nicht schwer sein, von der Quelle zu bauen (sagte, ohne es versucht zu haben).
ein CVn
1
Nein, ich ließ nur alle wissen, um sie vor dem Hinsehen zu bewahren. Es sieht ziemlich direkt aus.
SLM
6

Was ich tun würde, ist zuerst einen ntpDienst zu installieren , um die Zeit mit einem Remote-Server zu synchronisieren. Beenden Sie dann den Dienst, ändern Sie das Datum manuell, spielen Sie herum und starten Sie den Dienst neu:

service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start
terdon
quelle
1
"Soweit ich weiß, können Sie die Zeit nicht für nur einen Prozess ändern, da dies eine systemweite Sache ist." Eigentlich können Sie in gewisser Weise; Siehe meine Antwort.
ein Lebenslauf vom
2
@ MichaelKjörling zwar, aber mein Wissen zum Zeitpunkt des Schreibens erstreckte sich nicht auf deine Antwort. Soweit ich wusste gibt es keinen Weg :).
Terdon
Ich habe meine Antwort ungefähr 90 Sekunden vor Ihrer gepostet. ;)
ein CVn
1
@ MichaelKjörling yup, und ich habe meine bearbeitet (du kannst es nicht sehen, es wurde direkt nach dem Posten gemacht, als ich deine gesehen habe), um die "soweit ich weiß" hinzuzufügen :).
Terdon