Comment forcer une mise à jour d'horloge à l'aide de ntp?

339

J'utilise Ubuntu sur un système intégré basé sur ARM, dépourvu de RTC sauvegardé sur batterie. L’heure de réveil se situe quelque part au cours de 1970. J’utilise donc le service NTP pour mettre l’heure à jour.

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

sudo ntpdate -s time.nist.gov

Cependant, après le démarrage, quelques minutes sont nécessaires pour que le temps soit mis à 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é?

UPDATE 1: Ce qui suit (merci à Eric et Stephan) fonctionne correctement en ligne de commande, mais ne parvient pas à mettre à jour l'horloge lors de sa mise en /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 formulées en réponse à la première mise à jour, mais rien ne semble réellement permettre de 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. Supprimez le service ntp et laissez uniquement sudo ntpdate ... dans rc.local
  4. Supprimez le sudo de la commande ci-dessus dans rc.local

À partir de ce qui précède, la machine démarre toujours à 1970. Cependant, si 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 était de supprimer cela de rc.local et de passer un appel à ntpdate dans mon fichier .bashrc . Cela met à jour l'horloge comme prévu et j'obtiens l'heure actuelle réelle une fois l'invite de commande disponible.

Cependant , cela signifie que si la machine est allumée et qu'aucun utilisateur n'est connecté, l'heure ne sera jamais mise à jour. Je peux bien sûr réinstaller le service ntp afin que l'horloge soit au moins mise à jour quelques minutes après le démarrage, mais nous revenons à la case 1.

Alors, y a-t-il une raison pour laquelle placer la commande ntpdate dans rc.local n'effectue pas la tâche requise, alors que l'opération dans .bashrc fonctionne correctement?

    
posée ysap 13.02.2013 - 22:58
la source

16 réponses

297

Probablement que le service ntp est en cours d'exécution, 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 ceci dans /etc/rc.local , utilisez ceci:

( /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 )&
    
réponse donnée Eric Carvalho 14.02.2013 - 00:13
la source
446

Au lieu de ntpdate ( obsolète ), utilisez

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

-gq indique au démon ntp de corriger l’heure quel que soit le décalage ( g ) et de quitter immédiatement ( q ) après avoir réglé l’heure.

    
réponse donnée Martin Schröder 14.02.2013 - 13:32
la source
51

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

sudo sntp -s 24.56.178.140

Les nombres après -s peuvent être n’importe quel serveur de temps ntp, celui-ci étant NIST en pi. Collins, Colorado.

    
réponse donnée Guest 08.11.2013 - 02:00
la source
37

Comme d'autres l'ont déjà souligné, la meilleure solution consiste à indiquer à ntpd de ne pas tenir compte du seuil de panique défini par défaut à 1 000 secondes. Vous pouvez configurer le seuil de panique de deux manières:

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

Jusqu’à présent, c’est essentiellement ce que d’autres ont recommandé, mais vous devez 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 qu’elle remonte à 1970. Lorsque votre machine s’amorce, elle réglera son horloge 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.

    
réponse donnée dfc 04.04.2014 - 00:11
la source
12

ntpdate est un programme différent de net dameon. NTPDate a 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.

MISE À JOUR

Le service ntp n'aura probablement pas de valeur significative pour vous sur ce système, alors supprimez-le d'abord.

# sudo apt-get remove ntp

Maintenant, ajoutez la commande:

ntpdate -sb time.nist.gov

à /etc/rclocal

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

    
réponse donnée Stephan 14.02.2013 - 00:07
la source
10
rdate -s tick.greyware.com

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

    
réponse donnée batflaps 26.02.2015 - 23:57
la source
7

La bonne façon de faire ceci sur un système Debian / Mint / Ubuntu (ou un autre dérivé de Debian) consiste à avoir la ligne

NTPD_OPTS="-g"

dans le fichier

/etc/default/ntp

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

 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 quand il ya plus de 1000 secondes, par exemple lorsque l’heure du système est le 1er janvier 1970 au démarrage car il n’ya pas de RTC matériel.

    
réponse donnée J G Miller 03.04.2014 - 13:20
la source
4

Essayez d’utiliser l’option -b pour avancer l’heure.

    
réponse donnée Cry Havok 13.02.2013 - 23:18
la source
4

tlsdate définit l'horloge locale en se connectant de manière sécurisée avec TLS à des serveurs distants et en extrayant l'heure distante du dialogue sécurisé. . contrairement à ntpdate , tlsdate utilise TCP, par exemple pour se connecter à un protocole HTTPS ou TLS distant  service activé, et fournit une certaine protection contre les adversaires qui essaient de  vous nourrir d'informations de temps malicieux.

$ tlsdate -V -n -H encrypted.google.com
    
réponse donnée Kokizzu 23.02.2016 - 12:52
la source
3

lien

utilisez timedatectl pour régler l'heure, ntp est obsolète.

    
réponse donnée xiaoyifang 29.11.2016 - 09:57
la source
1

Notez que certains systèmes actuels basés sur Ubuntu n’utilisent même pas le service NTP par défaut à présent. Sur ma machine Linux Mint 19 (Ubuntu 18.04), l'heure est conservée par systemd-timesyncd .

Donc, pour obtenir une heure à jour après la perte de synchronisation, je viens de lancer

sudo systemctl restart systemd-timesyncd

Depuis 15.04, Ubuntu utilise systemd par défaut. Par conséquent, les systèmes critiques comme le temps sont gérés par systemd. Pour trouver le service utilisé par votre système, exécutez quelque chose comme

.
systemctl list-unit-files | grep -E 'ntp|timesyncd'

Pour TechJS le 16 avril, le service était ntp . Pour moi sur Ubuntu 18.04 (Mint 19), le service est systemd-timesyncd . Fait intéressant, je me suis connecté à un serveur 16.04 que j’ai et qui utilise également systemd-timesyncd .

    
réponse donnée 29.11.2018 - 16:55
la source
1

Les algorithmes ntpd ignorent les décalages d'échantillons supérieurs à 128 ms, sauf si l'intervalle pendant lequel aucun décalage d'échantillon [valeur absolue] est inférieur à 128 ms ne dépasse 900 secondes. Le premier échantillon suivant, quel que soit le décalage, fait avancer l’horloge jusqu’à l’heure indiquée. En pratique, cela réduit le taux de fausse alarme lorsque l'horloge est avancée par erreur jusqu'à une incidence extrêmement basse.

Normalement, ntpd se ferme si le décalage dépasse la limite de sécurité, qui est de 1000 s par défaut. Cela peut être désactivé avec l'option -g:

-g     Normalement, ntpd se ferme si le décalage dépasse la limite de sécurité, qui est de 1000 s par défaut. Si la limite de validité est définie sur zéro, aucune vérification de cohérence n'est effectuée et tout décalage est acceptable. Cette option annule la limite et permet de définir le temps sur n’importe quelle valeur sans restriction. Cependant, cela ne peut arriver qu'une fois. Après cela, ntpd se fermera si la limite est dépassée. Cette option peut être utilisée avec l'option -q.

les deux à partir du lien

- Jonathan Natale

    
réponse donnée Jonathzen 28.01.2015 - 22:26
la source
1

Eh bien,

Je lance un Raspbian (Debian Wheezy) sur mon Raspberry Pi, qui n’a pas l’horloge. J'ai trouvé pratique d'écrire un petit script et de le lancer après la mise en place de mon interface Internet, afin d'être sûr que dès que le réseau sera disponible, l'horloge sera mise à jour.

Vérifiez d'abord que vous avez le package ntpdate en exécutant

sudo apt-get update
sudo apt-get install ntpdate

Vous devez ajouter les éléments suivants dans votre /etc/network/interfaces (sûrement eth0 voici juste un exemple):

auto eth0
    iface eth0 inet dhcp
    post-up /usr/local/sbin/update-time.sh

Et créez le script suivant dans /usr/local/sbin/update-time.sh (n'oubliez pas de le rendre exécutable par chmod ):

#!/bin/bash
# This script checks if the ntp process is running, stops it, updates the system time, starts it again

ps cax | grep -c ntpd > /dev/null
onoff=$?
if [ "$onoff" -gt 0 ]; then
    echo "stopping ntpd..."
    service ntp stop
    echo "ntpd stopped"
else
    echo "ntpd not running, ready to update the date"
fi


isinstalled=$(dpkg-query -l | grep -c ntpdate)
if [ "$isinstalled" -gt 0 ]; then
    ntpdate -t 3 -s ntp4.stratum2.ru
    echo "date and time update executed"
else
    echo "ntpdate package not installed, can't update using ntp"
fi

echo "restarting ntpd..."
service ntp start 
echo "ntpd running"
echo "printing current date and time:"
date

exit
    
réponse donnée art.shutter 12.12.2015 - 16:14
la source
0

ntpd et ntpdate sont exécutés par défaut à l'aide d'un port restreint (UDP 123). Si vous êtes derrière un pare-feu, ntpd ne fonctionnera jamais, mais ntpdate peut fonctionner avec l'option -u . Par exemple, ntpdate -u 0.ubuntu.pool.ntp.org ou ntpdate -u time.nist.gov devrait fonctionner correctement.

    
réponse donnée G. N. DeSouza 05.06.2015 - 01:01
la source
0

Si vous avez le temps d'attendre le temps nécessaire pour que votre système soit synchronisé, vous pouvez utiliser la commande ntp-wait :

ntp-wait || exit -1 
# i believe this would exit the script if it fails, but not sure of ntp-wait return codes, learn this first.

echo Time is synced, go ahead with backup
tar
rsync etc.
    
réponse donnée Anonymous 08.12.2015 - 08:55
la source
0

Si vous êtes sur systemd, vous pouvez utiliser cette commande:

sudo systemctl restart ntp
# or
sudo systemctl restart ntp.service

Ensuite, l'heure est mise à jour dans les 10-15 secondes.
Testé sur le compagnon d'ubuntu 16.04

    
réponse donnée TechJS 21.02.2018 - 19:01
la source

Lire d'autres questions sur les étiquettes