Forcer systemd timesyncd à synchroniser l'heure avec le serveur NTP immédiatement

16

J'ai configuré systemd timesyncd pour obtenir son heure à partir d'un serveur NTP:

/etc/systemd/timesyncd.conf > NTP=ca.pool.ntp.org
systemctl restart systemd-timesyncd.service 
timedatectl set-ntp true

Le statut est le suivant:

$ timedatectl status
...
Network time on: yes
NTP synchronized: no

Comme l'indique la sortie, l'heure n'est pas encore synchronisée. Quelqu'un peut-il m'aider avec les questions suivantes?

  • Combien de temps faut-il pour que timesyncd se synchronise avec le NTP? À quels intervalles fait-il cela, où puis-je les vérifier et les modifier?
  • En cas d'urgence: puis-je uniquement régler l'heure manuellement ou puis-je forcer timesyncd à se synchroniser immédiatement avec le serveur NTP?
manifestant
la source

Réponses:

10

Pour utiliser une implémentation NTP réelle, vous devez en installer et en configurer une, chronyou peut-être ntpd. Faites-le si vous avez besoin d'une surveillance des performances horaires. Je vais assumer chrony.

Ajoutez iburstà vos lignes poolou serverdans votre configuration pour accélérer les premiers paquets. La stabilisation peut encore prendre quelques minutes, soyez patient.

chronyc trackingaffichera le décalage actuel. Ayez une idée de vos besoins, une seconde de précision peut facilement tolérer des dizaines de millisecondes de décalage.

chronyc makestepeffectuera immédiatement le réglage actuel. Pas nécessaire en général.


timesyncdest un client SNTP qui peut régler l'heure, mais pas la discipliner progressivement et en continu, ni filtrer le serveur NTP distant en fonction de la qualité . (Il ne peut pas non plus parler de temps matériel ou PTP, uniquement le protocole NTP.) Un peu mieux que répété ntpdate, je veux dire pas très bonne horloge. Personnellement, je le remplace sur la plupart des serveurs.

A propos de la seule façon de régler l'heure avec timesyncd est manuellement: timedatectl set-time "2019-01-15 00:40:16". Il ne dispose pas de moyens solides pour discipliner et surveiller l'horloge. Les statistiques de base NTP via timedatectl timesync-statussont une chose relativement nouvelle, je ne pense pas que cette option soit disponible dans Red Hat 7 ou Ubuntu 18.04.

systemd définit "synchronisé" comme si NTP a déjà été utilisé pour dire à Linux d'ajuster l'horloge. Plus précisément, si la discipline du noyau appelle adjtimex () retourné sans erreur, et non l'état initial. Voir le code source, systemd / src / basic / time-util.c.

John Mahowald
la source
Merci pour votre réponse, John. Donc, en fait, je peux désactiver systemd-timesyncd et utiliser chrony uniquement? Je ne suis pas sûr de comprendre pourquoi systemd a une option NTP et s'appelle timeSYNCd s'il n'est pas capable de synchroniser l'heure en fait? «Systemd définit« syncronisé »comme si l'appel de discipline du noyau NTP adjtimex () est retourné sans erreur, et non l'état initial» - ce n'est pas très clair pour moi.
manifestant
1
@chevallier systemd-timesyncd est très simple, et il est assez bon pour les cas les plus courants, par exemple un serveur avec une horloge en temps réel qui devrait fonctionner et sur le réseau 24x7. Le vôtre n'est pas un cas courant, vous ne devriez donc probablement pas l'utiliser. chrony est beaucoup mieux à même de gérer les interruptions de la connectivité réseau et d'être arrêté pendant de longues périodes (par exemple un ordinateur portable) ou de ne pas avoir de RTC du tout (par exemple les appareils intégrés).
Michael Hampton
1
timesyncd est un client SNTP, il définit donc l'heure sans le discipliner correctement. Ce qui est bien pour les exigences de précision grossières. Si vous souhaitez mesurer les performances temporelles ou attendre la synchronisation, utilisez un NTP complet comme chrony ou ntpd.
John Mahowald
11

Sans installer d'autres packages ... Désactivez NTP, réglez manuellement l'heure pour qu'il soit suffisamment proche , réactivez NTP:

Définir le service NTP inactif

$ timedatectl set-ntp false

Réglez l'heure manuellement

Oui, c'est triste, mais cela fonctionne et vous n'avez pas besoin de fouiller pour installer quoi que ce soit et le faire fonctionner. Obtenez l' heure LOCALE approximative à partir de l'horloge murale, de votre téléphone et d'Internet. Il n'a pas besoin d'être parfait car nous réactiverons ntp dans un instant ...

$ sudo timedatectl set-time "2019-06-22 13:41:00"

Définir le service NTP actif

$ sudo timedatectl set-ntp true

Attendre

john@mybox:~$ timedatectl
               Local time: Sat 2019-06-22 13:49:53 AEST
           Universal time: Sat 2019-06-22 03:49:53 UTC
                 RTC time: Sat 2019-06-22 03:49:54
                Time zone: Australia/Sydney (AEST, +1000)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

«L'horloge système synchronisée: non» se transforme en «oui» lorsqu'elle s'est suffisamment ajustée pour être considérée comme «synchronisée».

Dépannage

$ cat /etc/systemd/timesyncd.conf
[Time]
NTP=pool.ntp.org

$ timedatectl timesync-status
       Server: 13.210.208.89 (au.pool.ntp.org)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
 Packet count: 0

$ grep systemd-timesyncd /var/log/syslog | tail
Jun 22 14:13:09 meebox systemd-timesyncd[8333]: Timed out waiting for reply from 103.214.220.220:123 (au.pool.ntp.org).

Mes paquets ntp étaient bloqués par le pare-feu de l'entreprise.

John Mee
la source
L'installation d'un autre service de synchronisation horaire a également été ma première idée, mais ce n'est qu'une solution de contournement. Je cherchais une vraie solution. Voilà votre réponse. Ça marche. Merci :-)
Ingo