Zeitsynchronisation unter BSD

Um seine Systemzeit unter BSD genau zu halten, gibt es einige Möglichkeiten. Unter FreeBSD und NetBSD ist die einfachste sicher die mit Hilfe des Standardkommandos ntpdate und dem rdate Kommando aus der Port-Collection.

Ntpdate verwendet man zur Zeitsyncronisation mit einem öffentlichen NTP-Timeserver (Stratum 1, Stratum 2) und rdate eignet sich vor allem beim Einsatz im lokalen Netzwerk.

ntpdate

Eigentlich braucht man nicht mehr als ntpdate und die Hostadresse eines NTP-Timeservers. Die Adresse eines solchen Servers ist z.B. "ntps1-0.uni-erlangen.de".

Eine Liste frei zugänglicher Zeitserver findet man unter http://www.eecis.udel.edu/~mills/ntp/servers.html.

Um nun die Zeit des eigenen Rechners mit dem NTP-Timeserver zu synchronisieren, gibt man in der Kommandozeile folgendes ein:

# /usr/sbin/ntpdate ntps1-0.uni-erlangen.de
man erhält dann, wenn alles gut geht, folgende Ausgabe:
 8 Dec 18:54:55 ntpdate: adjust time server 131.188.34.45 offset 0.038449
Sollte es Verbindungsprobleme mit einem NTP-Timeserver geben, kann es sinnvoll sein gleich mehrere Zeit-Server anzugeben:
# /usr/sbin/ntpdate ntps1-0.uni-erlangen.de ntps1-1.uni-erlangen.de ntp0.nl.net
Ist der erste Timeserver nicht verfügbar, dann wird automatisch der nächste versucht.

rdate

Vor dem Einsatz von rdate muss man das entsprechende Package mit pkg_add installieren.

Rdate eignet sich hervoragend im Einsatz in einem lokalen Netzwerk, wo der Betrieb eines NTP-Timeservers zu aufwändig wäre. Am besten synchronisiert man mit rdate gegen einen Server, der sich selbst wiederum mit ntpdate gegen einen Stratum-Timeserver synchronisiert.

Konfiguration eines Servers für rdate-Clients

Um einen Server für rdate einzurichten, muss man in der Datei /etc/inetd.conf einer Maschine, die Zeile für das Service time (RFC868) aktivieren. Dazu muß man einfach nur das Rautezeichen (#) am Beginn der entsprechenden Zeilen entfernen.

time    stream  tcp     nowait  root    internal
time     dgram  udp     wait    root    internal
Jetzt muß noch der inetd neu gestartet werden:
# killall -1 inetd
Und kann das Ergebnis auf dieser Maschine mit
# rdate -p localhost
gleich überprüfen (Schalter -p lässt nur die Zeit anzeigen).

Aufruf von rdate am Client

Um die Zeit am Client mit dem Timeserver im lokalen Netzwerk zu syncronisieren, braucht man nur mehr rdate aufrufen.

# rdate zeitserv

Automatische Ausführung von ntpdate und rdate

Permanente Verbindung ins Internet

Ist man mit seinem Rechner permanent mit dem Internet verbunden, so ist es am besten ntpdate über cron [crontab(1,5)] oder periodic [periodic(8)] aufrufen zu lassen.

Einmaliges Ausführen beim Booten

Unter FreeBSD, geht das einfach mit folgender Ergänzung in der Datei /etc/rc.conf:

ntpdate_enable="YES"
ntpdate_flags="ntp0.nl.net"    # NTP-Server

Diese Variante empfiehlt sich, wenn der Rechner direkt mit dem Internet verbunden ist, z.B. Telekabel, Standleitung, jedoch nicht für ADSL und Dialup, wenn die Verbindung zum Internet erst nach dem Bootvorgang hergestellt wird.

Ausführung mit cron

Mit dem Kommando crontab kann man als Benutzer root seine eigene Crontab bearbeiten:

# crontab -e
Nun gibt man folgende Zeile ein, um ntpdate einmal täglich, um 23 Uhr, ausführen zu lassen:
0 23 * * *	/usr/sbin/ntpdate ntps1-0.uni-erlangen.de ntp0.nl.net >/dev/null 2>&1
oder stündlich:
0 * * * *      /usr/sbin/ntpdate ntps1-0.uni-erlangen.de ntps1-1.uni-erlangen.de ntp0.nl.net >/dev/null 2>&1
Der Vorteil eines stündlichen oder noch kürzereren Intervalls liegt darin, das bei einem Zeitunterschied von weniger als 0.5s, die Systemuhr nur beschleunigt bzw. verlangsamt wird, um die Systemzeit zu korrigieren. Daher es kommt zu keinen Zeitsprüngen, die sich nachteilig auf diverse zeitgesteuerte Prozesse auswirken.

Ausführung mit periodic

Im Verzeichnis /etc/periodic/daily findet man eine Datei mit dem Namen 999.local. In diese trägt man einfach das gewünschte Kommando ein, welches täglich ausgeführt werden soll:

#!/bin/sh
#
# $FreeBSD: src/etc/periodic/daily/999.local,v 1.1.1.1.2.1 1999/08/29 14:19:44 p
eter Exp $
#
# Run the old /etc/daily.local script.  This is really for backwards
# compatibility more than anything else.
#
if [ -f /etc/daily.local ]; then
	echo ""
	echo "Running daily.local:"
	sh /etc/daily.local
fi

# Systemzeit syncronisieren
/usr/sbin/ntpdate ntps1-0.uni-erlangen.de ntps1-1.uni-erlangen.de ntp0.nl.net

Dial-Up-Verbindung ins Internet

Ist man mit seinem Rechner nur mit Hilfe von Dial-Up-PPP [ppp(8), pppd(8)] mit dem Internet verbunden so kann man ntpdate automatisch nach dem Verbindungsaufbau aufrufen lassen.

Aufruf über ppp (ppp.linkup)

Man erweitert die Datei /etc/ppp/ppp.linkup um folgenden Eintrag:

MYADDR:
 delete ALL
 add 0 0 HISADDR
 !bg /usr/sbin/ntpdate ntps1-0.uni-erlangen.de ntps1-1.uni-erlangen.de ntp0.nl.net

Aufruf über pppd (ip-up)

Man erweitert die Datei /etc/ppp/ip-up um folgenden Eintrag:

#!/bin/sh
/usr/sbin/ntpdate ntps1-0.uni-erlangen.de ntps1-1.uni-erlangen.de ntp0.nl.net

Clients im lokalen Netzwerk

Um seine Clients im lokalen Netzwerk mit einem lokalen Zeitserver (RFC868, inetd[8]) zu synchronisieren:
# crontab -e
Nun gibt man folgende Zeile ein, um mit rdate die Zeit alle 15 Minuten zu aktualisieren:
*/15 * * * *	/usr/local/sbin/rdate zeitserv >/dev/null 2>&1

Copyright ©2000-2001 Michael Ranner mranner@bugat.at
BSD Usergroup Austria