NTP ist das Network Time Protocol. Dieses Protokoll erlaubt den Abgleich der Systemzeit mit einem zentralen ZeitServer (im Internet oder eigener Server im LAN).

Das Protokoll ist in RFC 1305 definiert (siehe auch http://www.ntp.org).

In unseren Breitengraden verwendet man am besten einen der folgenden Server:

Bemerkung: Laut http://www.eecis.udel.edu/~mills/ntp/clock1a.html soll man eine Notiz an den Betreiber schicken, wenn man die ptb-server benutzt.

Weitere öffentliche NTP-Server siehe: http://ntp.isc.org/bin/view/Servers/WebHome

Der Zeitabgleich funktioniert am einfachsten mit dem Kommando ntpdate Servername. Anschließend sollte die somit neu gestellte Betriebssystemzeit noch mit hwclock -uw auf die BIOS-Uhr übertragen werden.

Automatisierung durch Cron-Job

So richtig rund wird die Sache, wenn man z.B. über cron folgendes Script ausführt:

ntpdate -t 60 lieblingstimeserver; hwclock -u --systohc

hwclock stellt die Hardware-Uhr (RTC); -u heißt, dass diese auf UTC läuft. Sollte ntpdate nicht schnell genug eine Antwort bekommen (z.B. bei Wählleitungen), kann man das Timeout (-t) auch höher setzen.

Automatisierung bei Wählverbindung

Wer sich über eine Wählleitung mit dem Internet verbindet, kann die nötigen Befehle in der Datei /etc/ppp/ip-up.local unterbringen:

ntpdate ptbtime1.ptb.de
hwclock -uw

/!\ Unter SuSE 9.0 wird die Zeit über '/etc/ppp/poll.tcpip' beim Einwählen gesetzt, sofern "ntpdate" installiert ist. Der xntpd-Daemon darf nicht laufen. Dann wird ein "/usr/sbin/rcxntpd ntptimeset" ausgeführt. Es müsste lediglich noch die Zeile "/sbin/hwclock -uw" eingefügt werden. Das sollte dann so aussehen:

while true ; do
    set -- $(/sbin/runlevel)
    test -e /etc/init.d/rc${2}.d/S*xntpd  && break
    test -x   /usr/sbin/ntpdate            || break
    checkproc /usr/sbin/xntpd &> /dev/null && break
    /usr/sbin/rcxntpd ntptimeset
    /sbin/hwclock -uw
    break
done

Eigenen Zeitserver aufsetzen

Mit ntpd lässt sich sehr einfach ein eigener ZeitServer aufsetzen. Dazu trägt man in der bei der Installation von ntpd mitgelieferten Datei "/etc/ntp.conf" bis zu drei übergeordnete NTP-Server ein und startet den ntpd mit "/etc/init.d/ntpd start".

/!\ Es ist nicht zu empfehlen, ntpd als Server aufzusetzen, wenn man eine Wählleitung hat. Da er selbständig versucht, Verbindungen zu anderen Zeitservern aufzubauen, kann das zu Ärger führen. Vor allem muss der ntpd, sofern er sich die Zeit übers Internet holt, bei jedem re-connect neu gestartet werden. Die alten Verbindungen werden nicht weiter benutzt, und ntpd verliert vollständig die Synchronisation, obwohl der Prozesss läuft.

Mit "ntpq -p" kann man sich den Status anzeigen lassen.

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.ptb.de     .PTB.            1 u 1018 1024  377   27.052   -0.481   0.023
+ntp2.ptb.de     .PTB.            1 u  174 1024  377   24.566   -0.619   0.168
-rustime01.rus.u .DCFp.           1 u   80 1024  377   27.175    1.816   0.033

Der ntpd braucht nicht unbedingt als Zeitserver für andere Hosts zu dienen, auch für einzelne Clients kann der ntpd durchaus sinnvoll sein: Wenn man ntpdate benutzt, wird die Zeit "auf einen Schlag" richtig gestellt... auch via cronjob würde das täglich einen Zeitsprung verursachen. Der ntpd passt die Zeit "sanft" an, indem er die Uhr langsamer oder schneller laufen lässt. Das verhindert Probleme mit Programmen, die mit Zeitsprüngen nicht umgehen können. Außerdem gibt es keine Sprünge in den Log-Dateien. Allerdings sollte beim Start des ntpd die Zeit halbwegs stimmen. Deswegen am besten nach dem Systemstart mit ntpdate die Zeit synchronisieren und sofort danach den ntpd starten.

Natürlich kann man, statt sich die Zeit aus dem Internet zu holen, eine Funkuhr einsetzen. Siehe auch EigenbauFunkuhr.


Detaillierte Beschreibung

"root" kann sich mit ntpdate das Zeitsignal z. B. einer Atomuhr aus dem Internet holen und die Systemuhr damit hinreichend genau einstellen:

ntpdate ptbtime2.ptb.de ptbtime1.ptb.de

Wenn man die Uhr allerdings auf Dauer synchron halten will, ist diese Methode nicht sehr gut, da bei einem Aufruf von ntpdate die Uhr abrupt neu gestellt wird. Wenn sie so beispielsweise zurück gestellt wird, können in den Logdateien Uhrzeiten doppelt auftauchen.

Deshalb gibt es alternativ den etwas intelligenteren ntpd. Dieser stellt die Uhr nicht neu, sondern verlangsamt bzw. beschleunigt sie solange, bis die Uhrzeit stimmt.

root# cat << "EOC" > /etc/ntp.conf
driftfile /var/run/ntpd.drift
server ptbtime1.ptb.de
server ptbtime2.ptb.de
EOC

Jetzt noch den ntpd starten: {{{ntpd -p /var/run/ntpd.pid }}}

Statt ptbtime[12].ptb.de ist es sinnvoller, die NTP-Server seines Internet-Dienstleisters (sog. "provider") zu verwenden, soweit vorhanden.

NTP-Synchronisierung für den Router, rdate für die Clients

Da es suboptimal ist, wenn sich alle Clients hinter einem Router von einen Internet-NTP-Server die Zeit holen, ersetzt man auf den Clients die server-Zeile durch server routername.


ToDo: Refactoring


KategorieProtokoll KategorieServer

ntp (zuletzt geändert am 2008-08-04 09:21:38 durch 207-205-103-86)