Question Comment forcer une mise à jour d'horloge en utilisant ntp?


Je lance Ubuntu sur un système embarqué basé sur ARM dépourvu d'un RTC sauvegardé par batterie. L'heure de réveil est quelque part en 1970. J'utilise donc le service NTP pour mettre à jour l'heure à l'heure actuelle.

J'ai ajouté la ligne suivante à /etc/rc.local fichier:

sudo ntpdate -s time.nist.gov

Cependant, après le démarrage, il faut encore quelques minutes pour que l'heure soit mise à jour, période pendant laquelle je ne peux pas travailler efficacement avec tar et make.

Comment puis-je forcer une mise à jour de l'horloge à un moment donné?


MISE À JOUR 1: Ce qui suit (merci à Eric et Stephan) fonctionne bien à partir de la ligne de commande, mais ne parvient pas à mettre à jour l’horloge /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu Jan  1 00:00:58 UTC 1970
 * Stopping NTP server ntpd     [ OK ] 
 * Starting NTP server          [ OK ] 
Thu Feb 14 18:52:21 UTC 2013

Qu'est-ce que je fais mal?


MISE À JOUR 2: J'ai essayé de suivre les quelques suggestions qui ont été faites en réponse à la première mise à jour, mais rien ne semble vraiment faire le travail requis. Voici ce que j'ai essayé:

  1. Remplacez le serveur par us.pool.ntp.org
  2. Utiliser des chemins explicites vers les programmes
  3. Retirer le ntp service complet et quitte juste sudo ntpdate ... dans rc.local
  4. Retirer le sudo de la commande ci-dessus dans rc.local

En utilisant ce qui précède, la machine démarre toujours en 1970. Cependant, lorsque vous le faites depuis la ligne de commande une fois connecté (via ssh), l'horloge est mise à jour dès que j'appelle ntpdate.

La dernière chose que j'ai faite a été de retirer cela de rc.local et passer un appel à ntpdate dans mon .bashrc fichier. Cela met à jour l'horloge comme prévu, et j'obtiens l'heure réelle une fois que l'invite de commande est disponible.

toutefoisCela signifie que si la machine est allumée et qu'aucun utilisateur n'est connecté, l'heure ne reçoit jamais de mises à jour. Je peux bien sûr réinstaller le ntp le service au moins l'horloge est mis à jour dans quelques minutes du démarrage, mais alors nous sommes de retour à la place 1.

Alors, y a-t-il une raison pour laquelle placer le ntpdate commande en rc.local n'effectue pas la tâche requise tout en .bashrc fonctionne bien?


324
2018-02-13 21:58


origine


de [ici] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
notez le drapeau '-b' sur ntpdate. De la page de manuel de ntpdate: "Force le temps à passer à l’appel système settimeofday () plutôt qu’à l’utilisation de l’appel système adjtime (). Cette option doit être utilisée lors d’un appel au démarrage." Bon nombre des réponses ci-dessous ne l’incluent pas, et cela fait peut-être partie du problème pour faire avancer les choses. Considérez que le drapeau '-B' indique que les décalages de plus de 128 ms peuvent prendre des heures à se synchroniser en utilisant le mécanisme par défaut - Matt S.
Il n'y a pas besoin d'utiliser sudo dans les fichiers /etc/rc.locale .. ils sont déjà exécutés en tant que root. - Soren A


Réponses:


Probablement le ntp le service fonctionne, c'est pourquoi ntpdate ne peut pas ouvrir le socket (port 123 UDP) et se connecter au serveur ntp.

Essayez depuis la ligne de commande:

sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start

Si vous voulez mettre cela dans /etc/rc.local utilisez le suivant:

( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
   echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&

284
2018-02-13 23:13



Merci. Pouvez-vous s'il vous plaît expliquer pourquoi vous avez besoin des chemins explicites? - ysap
Je ne sais pas vraiment :-) J'ai eu du mal une fois à essayer de courir service à partir de rc.local et cron mais j'ai réussi à le réparer en utilisant /etc/init.d/xxx à la place. En fait, je pense que vous n'avez pas à donner le chemin complet à ntpdate, J'aime utiliser des chemins complets dans les scripts pour m'assurer que le bon fichier sera trouvé. - Eric Carvalho
OK, c'était apparemment le problème. Maintenant, l'horloge est mise à jour dès que la connexion réseau est établie. Merci. - ysap
J'ai découvert que le us.pool.ntp.org est plus réactif. - ysap
Avec le -u option, vous n'avez pas besoin d'arrêter le service ntp: sudo ntpdate -u time.nist.gov - Edward Anderson


Au lieu de ntpdate (qui est déconseillé), utilisation

sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

le -gq indique au démon ntp de corriger l'heure indépendamment du décalage (g) et sortir immédiatement (q) après avoir réglé l'heure.


427
2018-02-14 12:32



Merci. Toujours en 1970 après cette commande (w / sudo). En train de lire ntpd manpage, je ne sais pas comment cela force une mise à jour? - ysap
L'option "-q" indique au démon NTP de démarrer, de définir l'heure et de quitter immédiatement. L'option "-g" lui permet de corriger les différences de temps supérieures à 1000 sec. Pour le long terme, vous devez simplement configurer le démon NTP pour qu'il fonctionne toujours. - tgharold
Cette réponse devrait aller en haut, car elle est correcte: ntpdate est obsolète et l’installation est une mauvaise idée, car elle entre en conflit avec ntp. Si l'horloge est très éloignée, vous devez effectuer cette étape manuelle, sinon ntp ne changera pas votre horloge et ne vous dira pas pourquoi. - Liam
Pour moi, sudo ntpd -gq ne sort pas! Je suis au 14.10 et je dois CTRL + C pour continuer ... ou combien de temps est-il censé prendre? - Yanick Rochon
Pour info, sur mon système (CentOS 6.6), je devais changer les deux instances de sudo service ntp... à sudo service ntpd.... - rinogo


Utilisez sntp pour régler l'heure immédiatement. Par exemple:

sudo sntp -s 24.56.178.140

Les nombres après-peuvent être n'importe quel serveur de temps ntp, celui-là est NIST dans Ft. Collins, Colorado.


49
2017-11-08 01:00



Ça a marché! +1 - CappY
Cela a fonctionné quand "sudo ntpd -gq" ne l'a pas fait. - Matt White
Je ne sais pas combien de fois je suis venu chercher cette réponse. Fonctionne à chaque fois. - Chaos
incapable de localiser le package sntp? - temple
apt-get installe sntp / yum installe sntp (oui ça marche sur CentOS, RedHat, fedore aussi) - ndemou


Comme d'autres l'ont souligné, la meilleure solution consiste à demander à ntpd d'ignorer le seuil de panique, qui est de 1000 secondes par défaut. Vous pouvez configurer le seuil de panique de deux manières:

  • modifier /etc/default/ntp et assurez-vous que l'option -g est présente.
  • éditez /etc/ntp.conf et placez tinker panic 0 au sommet

Jusqu'à présent, c'est essentiellement ce que les autres ont recommandé, mais je pense que vous devriez faire un pas de plus. Installez le programme fake-hwclock:

# apt-get install fake-hwclock


fake-hwclock: Save/restore system clock on machines without working RTC hardware

 Some machines don't have a working realtime clock (RTC) unit, or no
 driver for the hardware that does exist. fake-hwclock is a simple set
 of scripts to save the kernel's current clock periodically (including
 at shutdown) and restore it at boot so that the system clock keeps at
 least close to realtime. This will stop some of the problems that may
 be caused by a system believing it has travelled in time back to
 1970, such as needing to perform filesystem checks at every boot.

 On top of this, use of NTP is still recommended to deal with the fake
 clock "drifting" while the hardware is halted or rebooting.

Avec fake-hwclock installé, votre machine ne démarrera pas en pensant à 1970. Lorsque votre machine démarre, son horloge sera réglée sur l'horodatage écrit par fake-hwclock lors du dernier redémarrage / arrêt. Cela signifie que vous pouvez avoir une horloge quelque peu correcte au cas où il y aurait des problèmes de réseau au démarrage.


37
2018-04-03 22:11



-g semblait ne rien faire pour moi (sur la ligne de commande, je n'ai pas /etc/default/ntp), mais en ajoutant tinker panic 0 à ntp.conf travaillé - Dave Cousineau
@Sahuagin Je ne sais pas quoi vous dire d'autre que vous avez un paquet ntp non standard. / etc / default / ntp fait partie du paquet d'Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist et -g a été une option aussi longtemps que je me souvienne. - dfc
désolé, je suppose que je ne suis pas réellement sur Ubuntu et devrait avoir réfléchi un peu plus avant de commenter. tinker panic 0 semble avoir bien fonctionné. - Dave Cousineau


ntpdate est un programme différent du net dameon. NTPDate est probablement une erreur au démarrage car ntpd est exécuté sur ce socket.

À partir de la ligne de commande, exécutez

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

Vous pouvez également désinstaller ntpd tous ensemble (apt-get remove ntp) et ajouter un script cron pour utiliser ntpdate toutes les heures environ.

METTRE À JOUR

Le service ntp n'aura probablement pas de valeur significative sur ce système, alors supprimez-le en premier.

# sudo apt-get remove ntp

Maintenant, ajoutez la commande:

ntpdate -sb time.nist.gov

à /etc/rclocal 

Redémarrez. Devrait être bon à ce point.


12
2018-02-13 23:07



réponse mise à jour - Stephan
Ntpdate n'est-il pas en train de disparaître? En outre, si je comprends bien, le service s'exécute et maintient la synchronisation de l'horloge locale sur l'horloge du serveur afin que la dérive soit liée. Si vous supprimez ntp et exécutez ntpdate une fois, ne sera-t-il pas affecté par une dérive d'horloge lorsque la machine est allumée pendant des périodes prolongées? - ysap
Stephan, s'il vous plaît voir la mise à jour # 2 à la question. - ysap
Oui, ntpdate est en cours d'élimination. L'utilisation de "ntpd -q" est préférable (les deux variantes exigent que ntpd soit arrêté en premier). - tgharold


rdate -s tick.greyware.com

si tout ce que vous voulez faire est de régler l'horloge une fois, simple


8
2018-02-26 22:57



Merci. Je n'ai pas actuellement le système pour vérifier cette commande, mais si vous suivez la discussion dans la question et la réponse acceptée, vous verrez que le problème était en fait une indisponibilité du réseau au moment de l'exécution de la commande update. - ysap
Cela a corrigé un problème de synchronisation sur mon Raspberry Pi. Je vous remercie. - Oliver Spryn


La manière correcte de le faire sur un système Debian / Mint / Ubuntu (ou un autre dérivé de Debian) est d'avoir la ligne

NTPD_OPTS="-g"

dans le fichier

/etc/default/ntp

Cela garantit que lorsque ntpd est démarré à partir du script /etc/init.d/ntp, il s'exécute avec l'option "-g", à savoir

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

pour permettre à ntpd de corriger l'heure du système lorsqu'il est à plus de 1000 secondes, par exemple lorsque l'heure du système est le 1er janvier 1970 au démarrage car il n'y a pas de RTC matériel.


7
2018-04-03 11:20



Je l'ai déjà, mais il dit toujours 3 heures à New York, alors qu'il devrait être 23 heures. - chovy
J'ai aussi déjà eu exactement cette ligne dans /etc/default/ntp, mais le temps n'était pas synchronisé. - Dawid Ferenczy