Afin de résoudre un bogue spécifique lié au fuseau horaire sur un projet logiciel sur lequel je « travaille, jessaye de répliquer un changement sur le système » s horloge en utilisant timedatectl pour vérifier le comportement de mon logiciel.

Jessaye dy parvenir en exécutant

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 

Quand je fais cela et que je lance timedatectl juste après, jobtiens lheure suivante prévue:

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 

Cependant, 10 secondes plus tard, lorsque la minute change (en xx:59), lheure locale et universelle est de type « redémarrer » à lheure actuelle

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 

Que me manque-t-il ici?

Ma configuration est une VM Vagrant Ubuntu 18 (Linux vagrant 4.15.0-51 / vm box « bento / ubuntu-18.04 »).

Commentaires

  • Vous constaterez peut-être que lheure de votre VM est synchronisée avec lheure de votre hôte '. Vous nêtes pas familier avec Vagrant, donc ' t vous indiquer une solution.
  • Réponse

    Cela nexpliquera pas le comportement que vous observez, mais cela devrait répondre à la question dans le titre.

    Au lieu de changer lheure du système, vous pouvez utiliser un outil tel que faketime et la variable denvironnement 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 

    Cela vous permettra dexécuter votre programme avec son propre fuseau horaire, date et heure, sans affecter le reste du système.

    Notez que comme il utilise un $LD_PRELOAD hack pour injecter du code dans les applications, cela ne fonctionnera pas pour les exécutables liés statiquement ou les exécutables setuid / setgid.

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *