Actualmente estoy intentando reducir el tiempo de arranque de un sistema Linux integrado. Una forma en que pensamos que podríamos hacerlo es posponiendo el script ntp init.d.
El demonio intentó sincronizarse con el servidor a través de la conexión Ethernet. Pero no siempre tenemos esa conexión activa y tarda mucho en arrancar mientras intenta sincronizarse. En nuestro sistema, ntp no es crucial, por lo que se puede iniciar más adelante.
Lo que quería hacer era hacer que el script ntpd init.d esperara unos 5 minutos pero sin bloquear el resto de la operación de arranque.
Este es el S49 en la carpeta init.d que estoy usando:
#! /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
Respuesta1
Como muestra su script de inicio, su retraso se debe al ntpdate
momento en que comienza.
Este es uno de los errores más comunes al configurar NTP. El propósito del uso ntpdate
es que ntpd
no salga con un error cuando se inicie. Lo hace si detecta que la diferencia horaria es muy grande. Sin embargo, ntpd
tiene la capacidad de ignorar esta diferencia horaria sólo una vez. Entonces, al activar esto, ntpdate
ya no es necesario.
La solución entonces es desactivar ntpdate
y utilizar esta función.
Para hacer esto, todo lo que necesitas hacer es crear /etc/default/ntpd
con lo siguiente:
NTPDATE_BIN="-"
DAEMON="/usr/sbin/ntpd -g"
Esto NTPDATE_BIN="-"
es para esta parte del script de inicio:
if [ -x $NTPDATE_BIN ] ; then
Buscará si hay un archivo llamado -
que sea ejecutable, pero no lo hay, por lo que omitirá esa sección.
El DAEMON="/usr/sbin/ntpd -g"
es para esto:
start-stop-daemon -S -q -x $DAEMON
Hará ntpd
que se invoque como ntpd -g
. La -g
opción es la opción que le dice que permita la gran diferencia horaria.
Respuesta2
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 se ejecuta en el arranque independientemente de todo si se encuentra como ejecutable. Si desea detener este comportamiento, debe eliminar ntpdate usando el administrador de paquetes que tiene o moviendo manualmente el binario.
Modificar el script también es una opción, pero si lo actualiza es probable que se sobrescriba.