Erzwingen Sie, dass systemd timesyncd die Zeit sofort mit dem NTP-Server synchronisiert

16

Ich habe systemd timesyncd so konfiguriert, dass es von einem NTP-Server abgerufen wird:

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

Der Status lautet wie folgt:

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

Wie die Ausgabe impliziert, ist die Zeit noch nicht synchronisiert. Kann mir bitte jemand bei folgenden Fragen helfen?

  • Wie lange dauert es, bis timesyncd mit dem NTP synchronisiert ist? In welchen Intervallen wird das gemacht, wo kann ich sie überprüfen und ändern?
  • In dringenden Fällen: Kann ich die Zeit nur manuell einstellen oder erzwingen, dass timesyncd sofort mit dem NTP-Server synchronisiert wird?
Manifestator
quelle

Antworten:

10

Um eine tatsächliche NTP-Implementierung zu verwenden, müssen Sie eine installieren und konfigurieren, chronyoder vielleicht ntpd. Tun Sie dies, wenn Sie eine Überwachung der Zeitleistung benötigen. Ich werde Chronik annehmen.

Fügen Sie iburstIhre pooloder server Zeilen in Ihrer Konfiguration hinzu, um die ersten paar Pakete zu beschleunigen. Es kann noch einige Minuten dauern, bis Sie sich stabilisiert haben. Seien Sie geduldig.

chronyc trackingzeigt den aktuellen Offset an. Haben Sie eine Vorstellung davon, was Ihre Anforderungen sind, kann eine Genauigkeit von einer Sekunde leicht einen Versatz von mehreren zehn Millisekunden tolerieren.

chronyc makestepnimmt sofort die aktuelle Einstellung vor. Normalerweise nicht notwendig.


timesyncdist ein SNTP-Client, der die Zeit einstellen, aber nicht schrittweise und kontinuierlich disziplinieren oder den Remote-NTP-Server nach Qualität filtern kann . (Es kann auch nicht mit Zeithardware oder PTP sprechen, sondern nur mit dem NTP-Protokoll.) Etwas besser als wiederholt ntpdate, womit ich nicht sehr gute Uhr meine. Persönlich ersetze ich es auf den meisten Servern.

Die einzige Möglichkeit, die Zeit mit timesyncd einzustellen, ist manuell : timedatectl set-time "2019-01-15 00:40:16". Es gibt keine robusten Mittel, um die Uhr zu disziplinieren und zu überwachen. Grundlegende NTP-Statistiken über timedatectl timesync-statussind eine relativ neue Sache. Ich glaube nicht, dass diese Option in Red Hat 7 oder Ubuntu 18.04 verfügbar ist.

systemd definiert "synchronisiert" als "wenn NTP jemals verwendet wurde, um Linux anzuweisen, die Uhr einzustellen". Insbesondere, wenn die Kerneldisziplin adjtimex () ohne Fehler zurückgibt und nicht den Ausgangszustand. Siehe den Quellcode systemd / src / basic / time-util.c.

John Mahowald
quelle
Danke für deine Antwort, John. Also kann ich systemd-timesyncd deaktivieren und nur chrony verwenden? Ich bin nicht ganz sicher, ob ich verstehe, warum systemd eine NTP-Option hat und timeSYNCd heißt, wenn es die Zeit tatsächlich nicht synchronisieren kann. "Systemd definiert" synkronisiert "als, wenn der NTP-Kernel-Disziplinaufruf adjtimex () fehlerfrei zurückgegeben wird und nicht der Ausgangszustand" - das ist mir nicht sehr klar.
Manifest
1
@chevallier systemd-timesyncd ist sehr einfach und für die häufigsten Fälle ausreichend, z. B. für einen Server mit einer Echtzeituhr, der voraussichtlich rund um die Uhr im Netzwerk ausgeführt wird. Ihre ist kein häufiger Fall, daher sollten Sie sie wahrscheinlich nicht verwenden. chrony ist viel besser darin, mit Unterbrechungen der Netzwerkkonnektivität umzugehen und für längere Zeit heruntergefahren zu werden (z. B. ein Laptop) oder überhaupt keine RTC zu haben (z. B. eingebettete Geräte).
Michael Hampton
1
timesyncd ist ein SNTP-Client, der die Zeit festlegt, ohne sie richtig zu disziplinieren. Welches ist gut für grobe Genauigkeitsanforderungen. Wenn Sie die Zeitleistung messen oder bis zur Synchronisierung warten möchten, verwenden Sie ein vollständiges NTP wie chrony oder ntpd.
John Mahowald
10

Ohne weitere Pakete zu installieren ... Schalten Sie NTP aus, stellen Sie die Zeit manuell so ein, dass sie nahe genug ist , und schalten Sie NTP wieder ein:

Setzen Sie den NTP-Dienst inaktiv

$ timedatectl set-ntp false

Stellen Sie die Zeit manuell ein

Ja, das ist traurig, aber es funktioniert und Sie müssen sich nicht darum kümmern, etwas zu installieren und es zum Laufen zu bringen. Holen Sie sich die ungefähre lokale Zeit von der Wanduhr, Ihrem Telefon, dem Internet. Es muss nicht perfekt sein, weil wir ntp gleich wieder einschalten werden ...

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

Aktivieren Sie den NTP-Dienst

$ sudo timedatectl set-ntp true

Warten

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

Die "Systemuhr synchronisiert: Nein" wird zu "Ja", wenn sie so eingestellt wurde, dass sie als "synchron" betrachtet werden kann.

Fehlerbehebung

$ 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).

Meine NTP-Pakete wurden von der Unternehmensfirewall blockiert.

John Mee
quelle
Die Installation eines anderen Zeitsynchronisierungsdienstes war ebenfalls meine erste Idee, aber das ist nur eine Problemumgehung. Ich suchte nach einer echten Lösung. Das ist deine Antwort. Es klappt. Danke :-)
Ingo