Adiar o ntpd

2

Atualmente, estou tentando reduzir o tempo de inicialização de um sistema Linux embarcado. Uma maneira que imaginamos que poderíamos fazer é 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 e leva muito tempo para inicializar enquanto ela tenta sincronizar. Em nosso sistema, o ntp não é crucial, portanto, pode ser iniciado posteriormente.

O que eu queria fazer era fazer o script ntpd init.d esperar por 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
    
por franchzilla 13.05.2014 / 17:08

2 respostas

4

Como seu script de inicialização mostra, seu atraso está sendo causado por ntpdate quando ele é iniciado.

Este é um dos erros mais comuns na configuração do NTP. A finalidade de usar ntpdate é de modo que ntpd não saia com um erro quando for iniciado. Ele faz isso se detectar que a diferença de tempo é muito grande. No entanto, ntpd tem a capacidade de ignorar essa diferença de tempo 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 o que você precisa fazer é criar /etc/default/ntpd com o seguinte:

NTPDATE_BIN="-"
DAEMON="/usr/sbin/ntpd -g"

O NTPDATE_BIN="-" é para este bit do script de inicialização:

if [ -x $NTPDATE_BIN ] ; then

Irá verificar se existe um ficheiro chamado - , que é executável, o que não existe, por isso irá saltar essa secção.

O DAEMON="/usr/sbin/ntpd -g" é para isso:

start-stop-daemon -S -q -x $DAEMON

Isso fará com que ntpd seja invocado como ntpd -g . A opção -g é a opção que informa que permite a grande diferença de tempo.

    
por 13.05.2014 / 19:06
0
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 parar este comportamento, você deve remover o ntpdate usando o gerenciador de pacotes que você possui ou movendo manualmente o binário.

Modificar o script também é uma opção, mas, se você atualizar, provavelmente ele será substituído.

    
por 13.05.2014 / 18:36

Tags