Para resolver um bug específico relacionado ao fuso horário em um projeto de software no qual estou trabalhando, estou tentando replicar uma mudança no sistema ” s relógio usando timedatectl para verificar o comportamento do meu software.

Estou tentando fazer isso executando

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 

Quando faço isso e executo timedatectl logo em seguida, obtenho o seguinte tempo esperado:

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 

No entanto, 10 segundos depois disso, quando o minuto muda (para xx:59), a hora local e universal é “reboot” para a hora atual

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 

O que estou perdendo aqui?

Minha configuração é uma VM Vagrant Ubuntu 18 (Linux vagrant 4.15.0-51 / vm box “bento / ubuntu-18.04”).

Comentários

  • Você pode descobrir que a hora da sua VM está sincronizada com a hora ' do seu host. Não estou familiarizado com o Vagrant, então ' pode indicar uma solução.

Resposta

Isso não explica o comportamento que você está vendo, mas deve responder à pergunta do título.

Em vez de alterar a hora do sistema, você pode usar uma ferramenta como faketime e a TZ variável de ambiente:

$ 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 

Isso permitirá que você execute seu programa com seu próprio fuso horário, data e hora, sem afetar o resto do sistema.

Observe que, como usa um $LD_PRELOAD hack para injetar código em aplicativos, não funcionará para executáveis vinculados estaticamente ou executáveis setuid / setgid.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *