Frage Wie erzwinge eine Uhrupdate mit NTP?


Ich benutze Ubuntu auf einem ARM-basierten Embedded-System, dem eine batteriegestützte RTC fehlt. Die Weckzeit liegt irgendwo im Jahr 1970. Daher nutze ich den NTP-Dienst, um die Uhrzeit auf die aktuelle Uhrzeit zu aktualisieren.

Ich habe die folgende Zeile hinzugefügt /etc/rc.local Datei:

sudo ntpdate -s time.nist.gov

Nach dem Start dauert es jedoch noch ein paar Minuten, bis die Uhrzeit aktualisiert ist. In dieser Zeit kann ich nicht effektiv arbeiten tar und make.

Wie kann ich eine Uhraktualisierung jederzeit erzwingen?


UPDATE 1: Das folgende (danke an Eric und Stephan) funktioniert gut von der Befehlszeile, aber es ist nicht möglich, die Uhr zu aktualisieren, wenn sie eingesetzt wird /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

Was mache ich falsch?


UPDATE 2: Ich habe versucht, den wenigen Vorschlägen zu folgen, die als Reaktion auf das erste Update kamen, aber nichts scheint den Job wirklich wie erforderlich zu erledigen. Folgendes habe ich versucht:

  1. Ersetzen Sie den Server durch us.pool.ntp.org
  2. Verwenden Sie explizite Pfade zu den Programmen
  3. Entferne das ntp Service insgesamt und verlassen Sie einfach sudo ntpdate ... im rc.local
  4. Entferne das sudo von dem obigen Befehl in rc.local

Mit dem oben genannten beginnt die Maschine immer noch bei 1970. Allerdings, wenn Sie dies von der Befehlszeile einmal eingeloggt (über ssh), wird die Uhr aktualisiert, sobald ich aufrufe ntpdate.

Das letzte, was ich getan habe, war das zu entfernen rc.local und rufe einen Anruf an ntpdate in meinem .bashrc Datei. Dies aktualisiert die Uhr wie erwartet, und ich bekomme die wahre aktuelle Zeit, sobald die Eingabeaufforderung verfügbar ist.

jedochDies bedeutet, dass, wenn der Computer eingeschaltet ist und kein Benutzer angemeldet ist, die Uhrzeit nie aktualisiert wird. Ich kann natürlich das neu installieren ntp Service also zumindest die Uhr wird innerhalb weniger Minuten vom Startup aktualisiert, aber dann sind wir wieder bei Platz 1.

Also, gibt es einen Grund, warum die ntpdate Befehl in rc.local führt die erforderliche Aufgabe nicht aus, während Sie dies tun .bashrc funktioniert gut?


324
2018-02-13 21:58


Ursprung


von [hier] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
Beachten Sie das '-b' Flag auf Ntpdate. Von der Manpage von ntpdate: "Erzwinge die Zeit, die mit dem Systemaufruf settimeofday () überschritten werden soll, anstatt sie zu verstellen (Standard), indem der Systemaufruf adjtime () verwendet wird. Diese Option sollte beim Aufruf aus einer Startdatei beim Systemstart verwendet werden." Viele der folgenden Antworten enthalten es nicht, und das ist vielleicht ein Teil des Problems, um Dinge zum Laufen zu bringen. Beachten Sie, dass das '-B' Flag erwähnt, dass Offsets über 128 ms Stunden dauern können, um mit dem Standard 'slew' Mechanismus zu synchronisieren - Matt S.
Es gibt keine Notwendigkeit zu verwenden sudo in /etc/rc.locale Dateien .. sie werden bereits als root ausgeführt. - Soren A


Antworten:


Wahrscheinlich der ntp Service läuft, deshalb ntpdate kann den Socket (Port 123 UDP) nicht öffnen und eine Verbindung zum NTP-Server herstellen.

Versuchen Sie es über die Befehlszeile:

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

Wenn du das einbringen willst /etc/rc.local benutze folgendes:

( /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



Vielen Dank. Kannst du bitte erklären, warum du die expliziten Wege brauchst? - ysap
Ich weiß es nicht wirklich. :-) Ich hatte einmal Mühe, zu rennen service von rc.local und cron, aber ich habe es geschafft, es mit /etc/init.d/xxx stattdessen zu beheben. Eigentlich denke ich, dass Sie nicht den vollen Weg zu geben brauchen ntpdateIch benutze gerne ganze Pfade in Skripten, um sicherzugehen, dass die richtige Datei gefunden wird. - Eric Carvalho
OK, das war anscheinend das Problem. Jetzt wird die Uhr aktualisiert, sobald die Netzwerkverbindung hergestellt ist. Vielen Dank. - ysap
Ich habe herausgefunden, dass die us.pool.ntp.org reagiert schneller. - ysap
Mit dem -u Option müssen Sie den ntp-Dienst nicht stoppen: sudo ntpdate -u time.nist.gov - Edward Anderson


Anstelle von ntpdate (das ist veraltet), benutzen

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

Das -gq weist den ntp-Daemon an, die Zeit unabhängig vom Offset zu korrigieren (g) und sofort verlassen (q) nach dem Einstellen der Uhrzeit.


427
2018-02-14 12:32



Vielen Dank. Zeigt immer noch 1970 nach diesem Befehl (w / sudo). lesen ntpd Manpage, ich bin mir nicht sicher, wie das ein Update erzwingt? - ysap
Die Option "-q" weist den NTP-Dämon an zu starten, die Zeit einzustellen und sofort zu beenden. Die Option "-g" ermöglicht es, Zeitunterschiede von mehr als 1000 Sekunden zu korrigieren. Längerfristig sollten Sie den NTP-Daemon einfach so konfigurieren, dass er immer ausgeführt wird. - tgharold
Diese Antwort sollte nach oben gehen, weil sie korrekt ist: ntpdate ist veraltet und die Installation ist eine schlechte Idee, weil es mit ntp kollidiert. Wenn die Uhr weit weg ist, müssen Sie diesen manuellen Schritt durchführen, da ntp sonst Ihre Uhr nicht ändert und Ihnen nicht sagt, warum. - Liam
Für mich, sudo ntpd -gq geht nicht aus! Ich bin am 14.10 und muss STRG + C drücken, um fortzufahren ... oder wie lange soll es dauern? - Yanick Rochon
Zur Erinnerung, auf meinem System (CentOS 6.6) musste ich die beiden Instanzen ändern sudo service ntp... zu sudo service ntpd.... - rinogo


Verwenden Sie sntp, um die Uhrzeit sofort festzulegen. Beispielsweise:

sudo sntp -s 24.56.178.140

Die Zahlen hinter -s können ein beliebiger NTP-Zeitserver sein, dieser ist NIST in Ft. Collins, Colorado.


49
2017-11-08 01:00



Das hat funktioniert! +1 - CappY
Dies funktionierte, wenn "sudo ntpd -gq" nicht funktionierte. - Matt White
Ich weiß nicht, wie oft ich nach dieser Antwort gesucht habe. Funktioniert jedes Mal. - Chaos
Kann Paket sntp nicht finden? - temple
apt-get install sntp / yum installieren sntp (ja es funktioniert auch auf CentOS, RedHat, fedore) - ndemou


Wie andere bereits erwähnt haben, besteht die beste Lösung darin, ntpd anzuweisen, den Überschreitungsschwellenwert zu ignorieren, der standardmäßig 1000 Sekunden beträgt. Sie können den Panikschwellenwert auf zwei Arten konfigurieren:

  • bearbeiten /etc/default/ntp und stellen Sie sicher, dass die Option -g vorhanden ist.
  • Bearbeiten Sie /etc/ntp.conf und platzieren Sie tinker panic 0 oben

Bis jetzt ist das im Wesentlichen das, was andere empfohlen haben, aber es gibt noch einen weiteren Schritt, den du meiner Meinung nach tun solltest. Installiere das Programm 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.

Wenn fake-hwclock installiert ist, wird Ihre Maschine nicht anfangen zu denken, dass es 1970 wieder ist. Wenn Ihr Computer hochfährt, wird seine Uhr auf den Zeitstempel gesetzt, den fake-hwclock während des letzten Neustarts / Herunterfahrens geschrieben hat. Dies bedeutet, dass Sie eine etwas korrekte Uhr haben können, falls beim Booten Netzwerkprobleme auftreten.


37
2018-04-03 22:11



-g schien nichts für mich zu tun (an der Befehlszeile habe ich nicht /etc/default/ntp), aber hinzufügen tinker panic 0 zu ntp.conf hat funktioniert - Dave Cousineau
@Sahuagin Ich weiß nicht, was ich dir sagen soll, außer du hast ein nichtstandardisiertes NTP-Paket. / etc / default / ntp ist Teil des Pakets von Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist und -g war eine Option, solange ich mich erinnern kann. - dfc
Entschuldigung, ich denke, ich bin eigentlich nicht auf Ubuntu und hätte mir ein wenig mehr überlegen sollen, bevor ich etwas kommentiere. tinker panic 0 Es scheint definitiv funktioniert zu haben. - Dave Cousineau


ntpdate ist ein Programm, das sich vom net dameon unterscheidet. NTPDate ist wahrscheinlich beim Booten fehlgeschlagen, weil ntpd auf diesem Socket läuft.

Führen Sie in der Befehlszeile aus

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

Sie könnten auch ntpd alle zusammen deinstallieren (apt-get remove ntp) und ein cron-Skript hinzufügen, um ntpdate jede Stunde oder so zu verwenden.

AKTUALISIEREN

NTP-Dienst wird wahrscheinlich keinen sinnvollen Wert für Sie auf diesem System haben, entfernen Sie also zuerst.

# sudo apt-get remove ntp

Fügen Sie nun den Befehl hinzu:

ntpdate -sb time.nist.gov

zu /etc/rclocal 

Starten Sie neu. Sollte zu diesem Zeitpunkt gut sein.


12
2018-02-13 23:07



Antwort aktualisiert - Stephan
Wird ntpdate nicht auslaufen oder etwas? Außerdem, wenn ich das richtig verstehe, läuft und hält der Dienst die Synchronisierung der lokalen Uhr mit der Uhr des Servers - so ist die Drift gebunden. Wenn Sie ntp entfernen und ntpdate einmal ausführen, wird dies nicht durch das Driften der Uhr beeinflusst, wenn das Gerät längere Zeit eingeschaltet ist? - ysap
Stephan, siehe Update # 2 zu der Frage. - ysap
Ja, ntpdate wird auslaufen. Die Verwendung von "ntpd -q" ist bevorzugt (beide Varianten erfordern, dass ntpd zuerst gestoppt wird). - tgharold


rdate -s tick.greyware.com

Wenn Sie nur einmal die Uhr einstellen möchten, einfach


8
2018-02-26 22:57



Vielen Dank. Ich habe derzeit nicht das System, um diesen Befehl zu überprüfen, aber wenn Sie die Diskussion in der Frage und die akzeptierte Antwort folgen, werden Sie sehen, dass das Problem tatsächlich Netzunerreichbarkeit zum Zeitpunkt der Ausführung des Uhrupdate-Befehls war. - ysap
Dies hat ein Zeitsynchronisierungs-Problem auf meinem Raspberry Pi behoben. Vielen Dank. - Oliver Spryn


Der richtige Weg, dies auf einem Debian / Mint / Ubuntu (oder einem anderen Debian-Derivat) System zu tun, ist die Zeile zu haben

NTPD_OPTS="-g"

in der Datei

/etc/default/ntp

Dadurch wird sichergestellt, dass beim Starten von ntpd aus dem Script /etc/init.d/ntp das Skript mit der Option "-g" ausgeführt wird

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

Damit ntpd die Systemzeit korrigieren kann, wenn mehr als 1000 s vergangen sind, z. B. wenn die Systemzeit beim Start auf den 1. Januar 1970 fällt, da keine Hardware-RTC vorhanden ist.


7
2018-04-03 11:20



Ich habe das schon, aber es sagt immer noch 3 Uhr morgens in NY, wenn es 23 Uhr sein sollte. - chovy
Ich hatte auch schon genau diese Linie /etc/default/ntp, aber die Zeit war nicht synchronisiert. - Dawid Ferenczy


Versuchen Sie es mit dem -b Option, um die Zeit zu verschieben.


4
2018-02-13 22:18



Wenn ich von der Befehlszeile aus versuche, bekomme ich folgende Antwort: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . Ich denke jedoch, dass ich das schon mal probiert habe rc.local aber es hat nicht geholfen. - ysap
Sie müssen den NTP-Dienst zuerst anhalten, bevor Sie ihn ausführen können ntpdate -b <ipaddress> - Wim Deblauwe


tlsdate Setzt die lokale Uhr durch sichere Verbindung mit TLS zu Remote-Servern und Extrahieren der Remote-Zeit aus dem sicheren Handshake. nicht wie ntpdate, tlsdate verwendet TCP, um beispielsweise eine Verbindung zu einem entfernten HTTPS oder TLS herzustellen  Service aktiviert, und bietet einen gewissen Schutz gegen Gegner, die versuchen  Feed Sie bösartige Zeitinformationen.

$ tlsdate -V -n -H encrypted.google.com

4
2018-02-23 11:52