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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *