Um einen bestimmten zeitzonenbezogenen Fehler in einem Softwareprojekt zu beheben, an dem ich arbeite, versuche ich, eine Änderung auf dem System zu replizieren. s Uhr mit timedatectl, um mein Softwareverhalten zu überprüfen.

Ich versuche dies zu erreichen, indem ich

timedatectl set-timezone America/New_York timedatectl set-local-rtc 1 timedatectl set-ntp false timedatectl set-time "2017-03-12 01:58:50" && hwclock -w 

Wenn ich das mache und timedatectl direkt danach ausführe, erhalte ich die erwartete folgende Zeit:

Local time: Sun 2017-03-12 01:58:51 EST Universal time: Sun 2017-03-12 06:58:51 UTC RTC time: Sun 2017-03-12 01:58:51 Time zone: America/New_York (EST, -0500) System clock synchronized: no systemd-timesyncd.service active: no RTC in local TZ: yes 

10 Sekunden später, wenn sich die Minute ändert (auf xx:59), wird die lokale und universelle Zeit auf die aktuelle Zeit „neu gestartet“

Local time: Wed 2019-08-07 21:01:41 EDT Universal time: Thu 2019-08-08 01:01:41 UTC RTC time: Sun 2017-03-12 01:58:57 Time zone: America/New_York (EDT, -0400) System clock synchronized: no systemd-timesyncd.service active: no RTC in local TZ: yes 

Was fehlt mir hier?

Mein Setup ist eine Vagrant Ubuntu 18-VM (Linux vagrant 4.15.0-51 / vm-Box „bento / ubuntu-18.04“).

Kommentare

  • Möglicherweise stellen Sie fest, dass Ihre VM-Zeit mit der Zeit Ihres Hosts ' synchronisiert ist. Nicht vertraut mit Vagrant, daher kann ' Sie nicht auf eine Lösung hinweisen.

Antwort

Dies erklärt nicht das Verhalten, das Sie sehen, aber es sollte die Frage im Titel beantworten.

Anstatt die Systemzeit zu ändern, können Sie ein Tool wie faketime und die Umgebungsvariable TZ:

$ date; faketime -f -15d date; TZ=America/New_York faketime -f -15d date Thu 8 Aug 10:21:13 CEST 2019 Wed 24 Jul 10:21:13 CEST 2019 Wed 24 Jul 04:21:13 EDT 2019 

Auf diese Weise können Sie Ihr Programm mit einer eigenen Zeitzone, einem eigenen Datum und einer eigenen Uhrzeit ausführen, ohne den Rest des Systems zu beeinflussen.

Beachten Sie dies verwendet einen $LD_PRELOAD -Hack, um Code in Anwendungen einzufügen. Er funktioniert nicht für statisch verknüpfte ausführbare Dateien oder ausführbare Dateien von setuid / setgid.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.