web-dev-qa-db-fra.com

Comment corriger automatiquement l'horloge système dans vagrant

Comment corriger le fuseau horaire

La dernière fois, j'ai compris comment régler une horloge système sur un serveur vagabond. Cependant, lorsque j'arrête le vagabond et le redémarre, l'horloge système a toujours 9 heures de retard. Je peux ajuster manuellement en utilisant la commande ntp, mais j'aimerais savoir comment régler automatiquement l'horloge système.

J'ai essayé le ci-dessous, mais cela ne fonctionne toujours pas. Y a-t-il des suggestions?

Comment synchroniser l'heure sur le réveil de l'hôte dans VirtualBox?

15
Sho

La méthode que j'utilise et qui ne devrait pas être spécifique au fournisseur consiste à ajouter ce qui suit dans mon fichier Vagrant

  config.vm.provision :Shell, :inline => "Sudo rm /etc/localtime && Sudo ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime", run: "always"

vous devez remplacer '/ Europe/Paris' par le fuseau horaire que vous souhaitez définir

27
Frédéric Henri

La réponse acceptée n'est pas assez robuste, car elle ne tient pas compte des personnes qui voyagent entre les fuseaux horaires et impose aux utilisateurs finaux de modifier Vagrantfile au lieu de se contenter de vagrant up.

Sur la base de la réponse de Scott P., voici une solution plus souple, plus efficace, qui associe automatiquement le fuseau horaire de VM à celui de l'hôte. Il y a une faute de frappe/erreur dans la sélection du fuseau horaire Etc/GMT de son extrait, comme indiqué dans POSIX GMT + 7 horloge 7 heures en retard (voir Explication du wiki ), par conséquent nous devons échanger les décalages:

Vagrant.configure("2") do |config|
require 'time'
offset = ((Time.zone_offset(Time.now.zone) / 60) / 60)
timezone_suffix = offset >= 0 ? "-#{offset.to_s}" : "+#{offset.to_s}"
timezone = 'Etc/GMT' + timezone_suffix
config.vm.provision :Shell, :inline => "Sudo rm /etc/localtime && Sudo ln -s /usr/share/zoneinfo/" + timezone + " /etc/localtime", run: "always"
end
6
Benny K

Une version légèrement améliorée qui détecte automatiquement le fuseau horaire:

La partie auto-détection venait de ici .

Vagrant.configure("2") do |config|
  require 'time'
  offset = ((Time.zone_offset(Time.now.zone) / 60) / 60)
  timezone_suffix = offset >= 0 ? "+#{offset.to_s}" : "#{offset.to_s}"
  timezone = 'Etc/GMT' + timezone_suffix
  config.vm.provision :Shell, :inline => "Sudo rm /etc/localtime && Sudo ln -s /usr/share/zoneinfo/" + timezone + " /etc/localtime", run: "always"
end
3
Scott P.

Le temps de mon système d'exploitation client vagabond était désynchronisé de 7 jours. Les méthodes ci-dessus ne fonctionnaient pas pour moi, car les ajouts d'invités et ntp n'étaient pas installés sur mon ordinateur invité.

J'ai finalement résolu le problème en utilisant le hack de https://askubuntu.com/a/683136/119371

cfg.vm.provision "Shell", inline: "date -s \"$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z\"", run: "always", privileged: true, upload_path: "/home/vagrant/tmp/vagrant-Shell"

La méthode ci-dessus ne synchronise pas l'heure du système d'exploitation invité avec votre ordinateur hôte ou un serveur NTP. Il envoie une requête HTTP à google.com et met à jour l'heure du système avec l'heure indiquée dans le champ d'en-tête de réponse HTTP.

Par conséquent, en fonction de votre vitesse de connexion Internet et de votre temps de latence, l'heure mise à jour peut être décalée de quelques millisecondes à quelques secondes (généralement <100 ms). Mais cela ne devrait pas avoir d'importance dans la plupart des cas.

Voici la version curl, si vous ne souhaitez pas utiliser wget pour une raison quelconque

cfg.vm.provision "Shell", inline: "date -s \"$(curl -I google.com 2>&1 | grep Date: | cut -d' ' -f3-6)Z\""
2
Joyce Babu

J'ai eu:

[vagrant@ansiblecontrol ~]$ date -s \"$(curl -I google.com 2>&1 | grep Date: | cut -d' ' -f3-6)Z\"
date: extra operand ‘2018’
Try 'date --help' for more information.

Cela fonctionne pour moi:

Sudo date -s "$(curl -I google.com 2>&1 | grep Date: | cut -d' ' -f3-6)Z"
Sun Apr  1 16:36:59 CEST 2018

Donc supprimé le caractère d'échappement "\".

2
Peter de Zwart

Basé sur la réponse de @Benny K. ( https://stackoverflow.com/a/46778032/3194807 ), l'heure d'été prise en compte: 

require "time"
offset = ((Time.zone_offset(Time.now.zone) / 60) / 60) + (Time.now.dst? ? 1 : 0)
timezone_suffix = offset >= 0 ? "-#{offset.to_s}" : "+#{offset.to_s}"
timezone = 'Etc/GMT' + timezone_suffix

tzShellProvision = <<_Shell_
    ln -fs /usr/share/zoneinfo/#{timezone} /etc/localtime
    dpkg-reconfigure -f noninteractive tzdata
_Shell_

default.vm.provision :Shell, inline: tzShellProvision, run: "always"