J'utilise Ubuntu sur un système intégré basé sur ARM et dépourvu de RTC sauvegardé par batterie. L’heure de réveil est quelque part au cours de 1970. Ainsi, j’utilise 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, la mise à jour de l'heure prend encore quelques minutes, période au cours de laquelle je ne peux pas travailler efficacement avec tar
et make
.
Comment puis-je forcer une mise à jour d'horloge à un moment donné?
PDATE 1: Ce qui suit (merci à Eric et Stephan) fonctionne bien en ligne de commande, mais ne parvient pas à mettre à jour l'horloge lorsqu'il est placé dans /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?
PDATE 2: J'ai essayé de suivre les quelques suggestions fournies en réponse à la 1ère mise à jour, mais rien ne semble vraiment faire le travail comme il se doit. Voici ce que j'ai essayé:
us.pool.ntp.org
ntp
et laissez simplement Sudo ntpdate ...
dans rc.local
Sudo
de la commande ci-dessus dans rc.local
En utilisant ce qui précède, la machine démarre toujours à 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 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 que la commande Invite est disponible.
Cependant , cela 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 service ntp
afin que l’horloge soit au moins mise à jour dans les minutes qui suivent 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 le faire dans .bashrc
fonctionne correctement?
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 ce qui suit:
( /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 )&
Au lieu de ntpdate (qui est 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 se terminer immédiatement (q
) après avoir réglé l'heure.
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.
Comme d'autres l'ont fait remarquer, la meilleure solution consiste à indiquer à ntpd de ne pas tenir compte du seuil de panique, qui est de 1000 secondes par défaut. Vous pouvez configurer le seuil de panique de deux manières:
/etc/default/ntp
et assurez-vous que l'option -g est présente.tinker panic 0
en hautJusqu’à présent, c’est essentiellement ce que d’autres ont recommandé, mais il ya encore une étape à franchir. 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, pensant qu’elle est à nouveau en 1970. Lorsque votre ordinateur démarre, il définira 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.
ntpdate est un programme différent du net dameon. NTPDate est probablement erroné 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.
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 point.
rdate -s tick.greyware.com
si tout ce que vous voulez faire est de régler l'horloge une fois, simple
La bonne façon de faire ceci 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 lancé à 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 système lorsqu'il y a plus de 1000 secondes, par exemple lorsque l'heure système est le 1er janvier 1970 au démarrage, car il n'y a pas de RTC matériel.
Utilisez timedatectl
(unité de service systemd) pour définir l'heure. ntp
est obsolète.
Sudo systemctl restart systemd-timesyncd.service
Vous pouvez vérifier que l'heure a été mise à jour en lisant les journaux avec journalctl -xe | tail
man timesyncd.conf
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 de la négociation sécurisée. Contrairement à ntpdate
, tlsdate
utilise TCP, par exemple, en se connectant à un service distant compatible HTTPS ou TLS, et fournit une protection contre les adversaires qui tentent de vous envoyer des informations de temps malveillantes.
$ tlsdate -V -n -H encrypted.google.com
Essayez d'utiliser l'option -b
pour avancer l'heure.
Notez que certains systèmes actuels basés sur Ubuntu n'utilisent même pas le service NTP par défaut maintenant. 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 lance simplement
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.04, 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 il utilise aussi systemd-timesyncd
.
Bien,
Je cours un Raspbian (debian Wheezy) sur mon Raspberry Pi, qui n'a pas le hwclock. J'ai trouvé pratique d'écrire un petit script et de l'exécuter après la mise à jour de mon interface Internet, afin d'être sûr que dès que le réseau sera disponible, l'horloge sera mise à jour.
Commencez par vérifier que vous avez le paquet ntpdate
en exécutant
Sudo apt-get update
Sudo apt-get install ntpdate
Vous devez ajouter ce qui suit 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
Si vous êtes sur systemd, vous pouvez utiliser cette commande:
Sudo systemctl restart ntp
# or
Sudo systemctl restart ntp.service
Et puis le temps est mis à jour dans les 10-15 secondes.
Testé sur ubuntu mate 16.04
Les algorithmes ntpd ignorent les décalages d'échantillons supérieurs à 128 ms, à moins que l'intervalle pendant lequel aucun décalage d'échantillon [valeur absolue] ne soit 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. Ceci 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 d'intégrité est définie sur zéro, aucune vérification d'intégrité 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.
tous deux de http://doc.ntp.org/4.1.0/ntpd.htm
-Jonathan Natale
ntpd
et ntpdate
exécuter par défaut en utilisant 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.
Si vous pouvez vous permettre d'attendre le temps qu'il faudra avant 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.