Za účelem vyřešení konkrétní chyby související s časovým pásmem u softwarového projektu, na kterém pracuji, se pokouším replikovat změnu v systému. “ hodiny pomocí timedatectl
ke kontrole chování mého softwaru.
Snažím se toho dosáhnout spuštěním
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
Když to udělám a hned poté spustím timedatectl
, dostanu očekávaný následující čas:
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
Avšak 10 sekund po tomto, když se minuta změní (na xx:59
), se místní a světový čas „restartuje“ na aktuální čas
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
Co mi zde chybí?
Moje nastavení je Vagrant Ubuntu 18 VM (linuxový tulák 4.15.0-51 / vm box „bento / ubuntu-18.04“).
Komentáře
- Možná zjistíte, že čas vašeho virtuálního počítače je synchronizován s časem vašeho hostitele '. Nejste obeznámeni s Vagrantem, takže vás ' nemůže nasměrovat k řešení.
Odpovědět
To nevysvětlí chování, které vidíte, ale mělo by to odpovědět na otázku v nadpisu.
Místo změny času systému můžete použít nástroj jako faketime
a proměnná prostředí 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
To vám umožní spustit program s vlastním časovým pásmem, datem a časem, aniž by to ovlivnilo zbytek systému.
Všimněte si, že používá $LD_PRELOAD
hack k vkládání kódu do aplikací, nebude fungovat pro staticky spojené spustitelné soubory nebo spustitelné soubory setuid / setgid.