Pentru a rezolva o eroare specifică legată de fusul orar pe un proiect software la care „lucrez,” încerc să replic o modificare pe sistem ” ceasul folosind timedatectl
pentru a-mi verifica comportamentul software-ului.
Încerc să realizez acest lucru executând
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
Când fac asta și rulez timedatectl
imediat după aceea, primesc următoarea dată așteptată:
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
Cu toate acestea, la 10 secunde după aceasta, când minutul se schimbă (în xx:59
), ora locală și universală se „repornește” la ora curentă
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
Ce îmi lipsește aici?
Configurarea mea este un Vagrant Ubuntu 18 VM (Linux vagrant 4.15.0-51 / vm box „bento / ubuntu-18.04”).
Comentarii
- Este posibil să descoperiți că timpul VM dvs. este sincronizat cu timpul gazdei '. Nu sunt familiarizați cu Vagrant, așa că ' nu vă poate indica o soluție.
Răspundeți
Acest lucru nu va explica comportamentul pe care îl vedeți, dar ar trebui să răspundă la întrebarea din titlu.
În loc să schimbați timpul sistemului, puteți utiliza un instrument precum faketime
și variabila de mediu 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
Acest lucru vă va permite să rulați programul cu fusul orar, data și ora proprii, fără a afecta restul sistemului.
Rețineți că așa cum folosește un $LD_PRELOAD
hack pentru a injecta cod în aplicații, nu va funcționa pentru executabile legate static sau executabile setuid / setgid.