For at løse en bestemt tidszone-relateret fejl på et softwareprojekt, som jeg arbejder på, prøver jeg at replikere en ændring på systemet ” s ur ved hjælp af timedatectl for at kontrollere min softwareadfærd.

Jeg prøver at opnå det ved at køre

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 

Når jeg gør det og kører timedatectl lige efter, får jeg det forventede følgende tidspunkt:

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 

Men 10 sekunder efter dette, når minutet ændres (til xx:59), den lokale og universelle tidstype “genstart” til det aktuelle tidspunkt

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 

Hvad mangler jeg her?

Min opsætning er en Vagrant Ubuntu 18 VM (Linux vagrant 4.15.0-51 / vm box “bento / ubuntu-18.04”).

Kommentarer

  • Det kan godt være, at din VM-tid er synkroniseret med din vært ' s tid. Ikke bekendt med Vagrant, så ' t kan pege dig på en løsning.

Svar

Dette forklarer ikke den adfærd, du ser, men det skal besvare spørgsmålet i titlen.

I stedet for at ændre systemets tid kan du bruge et værktøj som faketime og miljøvariablen 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 

Dette giver dig mulighed for at køre dit program med sin egen tidszone, dato og tid uden at påvirke resten af systemet.

Bemærk, at det er bruger et $LD_PRELOAD hack til at indsprøjte kode i applikationer, det fungerer ikke for statisk linkede eksekverbare filer eller setuid / setgid eksekverbare filer.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *