Atualmente estou tentando reduzir o tempo de inicialização de um sistema Linux embarcado. Uma maneira que achamos que poderíamos fazer isso é adiar o script ntp init.d.
O daemon tentou sincronizar com o servidor através da conexão Ethernet. Mas nem sempre temos essa conexão ativa e demora muito para inicializar enquanto tenta sincronizar. Em nosso sistema, o ntp não é crucial, portanto pode ser iniciado posteriormente.
O que eu queria fazer era fazer com que o script ntpd init.d esperasse cerca de 5 minutos, mas sem bloquear o resto da operação de inicialização.
Este é o S49 na pasta init.d que estou 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
Responder1
Como mostra seu script de inicialização, seu atraso está sendo causado pelo ntpdate
início.
Este é um dos erros mais comuns ao configurar o NTP. O objetivo do uso ntpdate
é para que ntpd
não saia com erro na inicialização. Ele faz isso se detectar que a diferença horária é muito grande. No entanto, ntpd
tem a capacidade de ignorar esta diferença horária apenas uma vez. Então, ao ativar isso, ntpdate
não é mais necessário.
A solução então é desabilitar ntpdate
e usar esse recurso.
Para fazer isso, tudo que você precisa fazer é criar /etc/default/ntpd
com o seguinte:
NTPDATE_BIN="-"
DAEMON="/usr/sbin/ntpd -g"
O NTPDATE_BIN="-"
é para esta parte do script de inicialização:
if [ -x $NTPDATE_BIN ] ; then
Ele verificará se existe um arquivo chamado -
que seja executável, o que não existe, portanto, pulará essa seção.
O DAEMON="/usr/sbin/ntpd -g"
é para isso:
start-stop-daemon -S -q -x $DAEMON
Isso fará com ntpd
que seja invocado como ntpd -g
. A -g
opção é a opção que permite a grande diferença de horário.
Responder2
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
O ntpdate está sendo executado na inicialização independentemente de tudo, se for encontrado como executável. Se você quiser interromper esse comportamento, remova o ntpdate usando o gerenciador de pacotes que possui ou movendo manualmente o binário.
Modificar o script também é uma opção, mas se você atualizar, provavelmente ele será substituído.