Om een specifieke tijdzonegerelateerde bug op te lossen in een softwareproject waaraan ik “werk, probeer ik een wijziging op het systeem te repliceren” s klok met timedatectl
om mijn softwaregedrag te controleren.
Ik “probeer dat te bereiken door
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
Als ik dat doe en timedatectl
direct daarna start, krijg ik de verwachte volgende tijd:
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
Echter, 10 seconden daarna, wanneer de minuut verandert (naar xx:59
), de lokale en universele tijd soort “reboot” naar de huidige tijd
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
Wat mis ik hier?
Mijn setup is een Vagrant Ubuntu 18 VM (Linux vagrant 4.15.0-51 / vm box “bento / ubuntu-18.04”).
Reacties
- Het is heel goed mogelijk dat uw VM-tijd is gesynchroniseerd met de tijd van uw host '. Niet bekend met Vagrant, dus ' kan u niet naar een oplossing verwijzen.
Antwoord
Dit verklaart niet het gedrag dat u ziet, maar het zou de vraag in de titel moeten beantwoorden.
In plaats van de systeemtijd te veranderen, kunt u een tool gebruiken zoals faketime
en de TZ
omgevingsvariabele:
$ 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
Hiermee kunt u uw programma uitvoeren met zijn eigen tijdzone, datum en tijd, zonder de rest van het systeem te beïnvloeden.
Merk op dat aangezien het gebruikt een $LD_PRELOAD
hack om code in applicaties te injecteren, het werkt niet voor statisch gekoppelde executables of setuid / setgid executables.