Ich versuche derzeit, die Startzeit eines eingebetteten Linux-Systems zu verkürzen. Wir dachten, dass wir das unter anderem erreichen könnten, indem wir das NTP-Skript init.d verschieben.
Der Daemon hat versucht, sich über die Ethernet-Verbindung mit dem Server zu synchronisieren. Aber wir haben diese Verbindung nicht immer und der Startvorgang dauert lange, während er versucht, sich zu synchronisieren. In unserem System ist NTP nicht entscheidend, daher kann es zu einem späteren Zeitpunkt gestartet werden.
Ich wollte, dass das Skript ntpd init.d etwa 5 Minuten wartet, ohne jedoch den Rest des Startvorgangs zu blockieren.
Dies ist der S49 im init.d-Ordner, den ich verwende:
#! /bin/sh
#
# System-V init script for the openntp daemon
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="network time protocol daemon"
NAME=ntpd
DAEMON=/usr/sbin/$NAME
NTPDATE_BIN=/usr/bin/ntpdate
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
# Read config file if it is present.
if [ -r /etc/default/$NAME ]
then
. /etc/default/$NAME
fi
case "$1" in
start)
if [ -x $NTPDATE_BIN ] ; then
echo -n "Getting initial time via ntp"
$NTPDATE_BIN $NTPDATE_OPTS $NTPSERVERS > /dev/null 2>&1
echo "."
fi
echo -n "Starting $DESC: $NAME"
start-stop-daemon -S -q -x $DAEMON
echo "."
;;
stop) echo -n "Stopping $DESC: $NAME"
start-stop-daemon -K -q -n $NAME
echo "."
;;
reload|force-reload) echo -n "Reloading $DESC configuration..."
start-stop-daemon -K -q -n $NAME -s 1
echo "done."
;;
restart) echo "Restarting $DESC: $NAME"
$0 stop
sleep 1
$0 start
;;
*) echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
Antwort1
ntpdate
Wie Ihr Init-Skript zeigt, wird Ihre Verzögerung durch den Startzeitpunkt verursacht .
Dies ist einer der häufigsten Fehler beim Einrichten von NTP. Der Zweck der Verwendung ntpdate
besteht darin, dass ntpd
beim Start kein Fehler auftritt. Dies geschieht, wenn festgestellt wird, dass der Zeitunterschied sehr groß ist. ntpd
Es besteht jedoch die Möglichkeit, diesen Zeitunterschied nur einmal zu ignorieren. Wenn Sie dies aktivieren, ntpdate
ist dies nicht mehr erforderlich.
Die Lösung besteht dann darin, ntpdate
diese Funktion zu deaktivieren und zu verwenden.
Dazu müssen Sie lediglich /etc/default/ntpd
Folgendes erstellen:
NTPDATE_BIN="-"
DAEMON="/usr/sbin/ntpd -g"
Das NTPDATE_BIN="-"
ist für diesen Teil des Init-Skripts:
if [ -x $NTPDATE_BIN ] ; then
Es wird geprüft, ob eine -
ausführbare Datei mit dem Namen vorhanden ist. Dies ist nicht der Fall. Daher wird dieser Abschnitt übersprungen.
Das DAEMON="/usr/sbin/ntpd -g"
ist hierfür:
start-stop-daemon -S -q -x $DAEMON
Es wird ntpd
aufgerufen als ntpd -g
. Die -g
Option ist die Option, die angibt, dass der große Zeitunterschied zugelassen werden soll.
Antwort2
case "$1" in
start)
if [ -x $NTPDATE_BIN ] ; then
echo -n "Getting initial time via ntp"
$NTPDATE_BIN $NTPDATE_OPTS $NTPSERVERS > /dev/null 2>&1
echo "."
fi
ntpdate wird beim Booten unabhängig von allem ausgeführt, wenn es als ausführbare Datei gefunden wird. Wenn Sie dieses Verhalten unterbinden möchten, sollten Sie ntpdate mit Ihrem vorhandenen Paketmanager entfernen oder die Binärdatei manuell verschieben.
Sie können das Skript auch ändern, es besteht jedoch die Möglichkeit, dass es bei einer Aktualisierung überschrieben wird.