Wie erzwinge ich ein Uhr-Update mit ntp?


Zur akzeptierten Antwort gehen


Ich verwende Ubuntu auf einem ARM-basierten Embedded-System, dem eine batteriegepufferte Echtzeituhr fehlt. Die Weckzeit liegt irgendwo im Jahr 1970. Daher verwende ich den NTP-Dienst, um die Zeit auf die aktuelle Zeit zu aktualisieren.

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

 sudo ntpdate -s time.nist.gov
 

Nach dem Start dauert es jedoch noch einige Minuten, bis die Zeit aktualisiert ist. Während dieser Zeit kann ich nicht effektiv mit tar und arbeiten make .

Wie kann ich eine Aktualisierung der Uhr zu einem bestimmten Zeitpunkt erzwingen?


UPDATE 1: Das Folgende (danke an Eric und Stephan) funktioniert einwandfrei von der Kommandozeile aus, kann aber die Uhr beim Einfügen nicht aktualisieren /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 eingegangen sind, aber nichts scheint tatsächlich die erforderliche Arbeit zu leisten. Folgendes habe ich versucht:

  1. Tauschen Sie den Server gegen aus us.pool.ntp.org
  2. Verwenden Sie explizite Pfade zu den Programmen
  3. Entfernen Sie den ntp Service insgesamt und lassen Sie nur sudo ntpdate ... in rc.local
  4. Entfernen Sie den sudo aus dem obigen Befehl in rc.local

Unter Verwendung der obigen Einstellungen startet der Computer immer noch um 1970. Wenn Sie dies jedoch über die Befehlszeile tun, nachdem Sie sich (über ssh ) angemeldet haben , wird die Uhr aktualisiert, sobald ich sie aufrufe ntpdate .

Das letzte, was ich tat, war, das zu entfernen rc.local und einen Anruf ntpdate in meine .bashrc Akte zu setzen. Dadurch wird die Uhr wie erwartet aktualisiert und die aktuelle Uhrzeit wird angezeigt, sobald die Eingabeaufforderung verfügbar ist.

Dies bedeutet jedoch , dass die Zeit nie aktualisiert wird, wenn der Computer eingeschaltet ist und kein Benutzer angemeldet ist. Ich kann den ntp Dienst natürlich neu installieren , damit die Uhr innerhalb weniger Minuten nach dem Start aktualisiert wird, aber dann sind wir wieder auf Platz 1.

Gibt es einen Grund, warum das Platzieren des ntpdate Befehls in rc.local nicht die erforderliche Aufgabe ausführt, während dies in .bashrc einwandfrei funktioniert?


382





2013-02-13




Anzahl der Antworten: 16


Wahrscheinlich wird der ntp Dienst ausgeführt, daher ntpdate kann der Socket (Port 123 UDP) nicht geöffnet und keine Verbindung zum NTP-Server hergestellt werden.

Versuchen Sie es über die Befehlszeile:

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

Wenn Sie dies verwenden möchten, gehen Sie wie /etc/rc.local folgt vor:

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

327


2013-02-13

Verwenden Sie anstelle von ntpdate (das veraltet ist )

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

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


495



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

 sudo sntp -s 24.56.178.140
 

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


63


2013-11-08

Wie bereits erwähnt, besteht die beste Lösung darin, ntpd anzuweisen, die Panikschwelle zu ignorieren, die 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.
  • editiere /etc/ntp.conf und platziere es tinker panic 0 oben

Bisher ist dies im Wesentlichen das, was andere empfohlen haben, es gibt jedoch noch einen weiteren Schritt, den Sie meiner Meinung nach unternehmen sollten. Installieren Sie das Fake-Hwclock-Programm:

 # 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 Sie eine gefälschte Uhr installiert haben, startet Ihre Maschine nicht mehr und denkt, dass es wieder 1970 ist. Wenn Ihr Computer hochfährt, stellt er seine Uhr auf den Zeitstempel ein, den die falsche Uhr beim letzten Neustart / Herunterfahren geschrieben hat. Dies bedeutet, dass Sie eine etwas korrekte Uhr haben können, falls beim Booten Netzwerkprobleme auftreten.


40


2014-04-03

ntpdate ist ein anderes Programm als net dameon. Wahrscheinlich tritt beim Booten ein Fehler bei NTPDate auf, da ntpd auf diesem Socket ausgeführt wird.

Führen Sie von der Befehlszeile aus

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

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

AKTUALISIEREN

Der ntp-Dienst wird auf diesem System wahrscheinlich keinen sinnvollen Wert für Sie haben, entfernen Sie ihn 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 an diesem Punkt gut sein.


13


2013-02-13

Verwenden Sie timedatectl (systemd service unit), um die Uhrzeit einzustellen. ntp ist veraltet.

 sudo systemctl restart systemd-timesyncd.service
 

Sie können überprüfen, ob die Uhrzeit aktualisiert wurde, indem Sie die Protokolle mit lesen journalctl -xe | tail

Referenz


13


2016-11-29

 rdate -s tick.greyware.com
 

Wenn Sie nur einmal die Uhr stellen möchten, ist dies ganz einfach


10


2015-02-26

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

 NTPD_OPTS="-g"
 

in der Datei

 /etc/default/ntp
 

Auf diese Weise wird sichergestellt, dass ntpd beim Start über das Skript /etc/init.d/ntp 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 kann ntpd die Systemzeit korrigieren, wenn sie mehr als 1000 s abläuft, z. B. wenn die Systemzeit beim Start am 1. Januar 1970 liegt, da keine Hardware-RTC vorhanden ist.


7


2014-04-03

tlsdate Stellt die lokale Uhr ein, indem eine sichere Verbindung mit TLS zu Remote-Servern hergestellt und die Remote-Zeit aus dem sicheren Handshake extrahiert wird. Im Gegensatz zu ntpdate , tlsdate verwendet TCP, zum Beispiel an einen Remote - Verbindungs HTTPS oder TLS aktiviert Service und bietet einen gewissen Schutz gegen Gegner , die versuchen , Ihnen Informationen böswillige Zeit zu füttern.

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

5


2016-02-23

Beachten Sie, dass einige aktuelle Ubuntu-basierte Systeme standardmäßig nicht einmal den NTP-Dienst verwenden. Auf meinem Linux Mint 19 (Ubuntu 18.04) Rechner wird die Zeit von gehalten systemd-timesyncd .

Um eine aktuelle Zeit zu erhalten, nachdem die Synchronisation verloren gegangen ist, renne ich einfach

 sudo systemctl restart systemd-timesyncd
 

Seit 15.04 verwendet Ubuntu standardmäßig systemd. Daher werden kritische Systeme wie die Zeit über systemd verwaltet. Um herauszufinden, welchen Dienst Ihr System verwendet, führen Sie etwa Folgendes aus

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

Für TechJS am 16.04 war der Service ntp . Für mich auf Ubuntu 18.04 (Mint 19) ist der Service systemd-timesyncd . Interessanterweise habe ich mich bei einem 16.04-Server angemeldet, der auch verwendet wird systemd-timesyncd .


5


2018-11-29

Versuchen Sie es mit der -b Option, um die Zeit zu erhöhen.


4


2013-02-13

Gut,

Auf meinem Himbeer-Pi läuft ein Raspbian (Debian Wheezy), der nicht über die Uhr verfügt. Ich fand es praktisch, ein kleines Skript zu schreiben und es auszuführen, nachdem meine Internetschnittstelle aktiv ist, sodass ich sicher bin, dass die Uhr aktualisiert wird, sobald das Netzwerk verfügbar ist.

Überprüfen Sie zunächst, ob Sie das ntpdate Paket haben, indem Sie ausführen

 sudo apt-get update
sudo apt-get install ntpdate
 

Sie müssen Folgendes in Ihre hinzufügen /etc/network/interfaces ( eth0 hier ist sicherlich nur ein Beispiel):

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

Und erstellen Sie das folgende Skript in /usr/local/sbin/update-time.sh (vergessen Sie nicht, es ausführbar zu machen 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
 

2


2015-12-12

Die ntpd-Algorithmen verwerfen Sample-Offsets, die 128 ms überschreiten, es sei denn, das Intervall, in dem kein [absoluter Wert von] Sample-Offset kleiner als 128 ms ist, überschreitet 900s. Das erste Sample danach, unabhängig vom Offset, stellt die Uhr auf die angegebene Zeit ein. In der Praxis reduziert dies die Fehlalarmrate, wenn die Uhr fehlerhaft verschoben wird, auf ein verschwindend geringes Vorkommen.

Normalerweise wird ntpd beendet, wenn der Offset die Vernunftsgrenze überschreitet, die standardmäßig 1000 s beträgt. Dies kann mit der Option -g ausgeschaltet werden:

-g Normalerweise wird ntpd beendet, wenn der Offset die Vernunftsgrenze überschreitet, die standardmäßig 1000 s beträgt. Wenn die Vernunftsgrenze auf Null gesetzt ist, wird keine Vernunftsprüfung durchgeführt und ein Offset ist akzeptabel. Diese Option überschreibt das Limit und ermöglicht es, die Zeit ohne Einschränkung auf einen beliebigen Wert zu setzen. Dies kann jedoch nur einmal vorkommen. Danach wird ntpd beendet, wenn das Limit überschritten wird. Diese Option kann mit der Option -q verwendet werden.

beide von http://doc.ntp.org/4.1.0/ntpd.htm

-Jonathan Natale


1


2015-01-28

Wenn Sie sich die Zeit leisten können, zu warten, bis Ihr System synchronisiert ist, können Sie den folgenden ntp-wait Befehl verwenden:

 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.
 

1


2015-12-08

Wenn Sie auf systemd sind, können Sie diesen Befehl verwenden:

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

Und dann wird die Zeit innerhalb von 10-15 Sekunden aktualisiert.
Getestet auf Ubuntu Mate 16.04


1


2018-02-21

ntpd und ntpdate standardmäßig über einen eingeschränkten Port (UDP 123) ausgeführt. Wenn Sie sich hinter einer Firewall befinden, ntpd wird das nie funktionieren, ntpdate kann aber mit der -u Option funktionieren . Zum Beispiel: ntpdate -u 0.ubuntu.pool.ntp.org oder ntpdate -u time.nist.gov sollten beide gut funktionieren.


0


2015-06-04