Отсрочка ntpd

Отсрочка ntpd

В настоящее время я пытаюсь сократить время загрузки встроенной системы Linux. Один из способов, который мы решили сделать, — отложить скрипт ntp init.d.

Демон пытался синхронизироваться с сервером через соединение Ethernet. Но у нас не всегда есть это соединение, и загрузка занимает много времени, пока он пытается синхронизироваться. В нашей системе ntp не имеет решающего значения, поэтому его можно запустить позже.

Я хотел сделать так, чтобы скрипт ntpd init.d ждал около 5 минут, но не блокировал остальную часть операции загрузки.

Это S49 в папке init.d, которую я использую:

    #! /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

решение1

Как показывает ваш скрипт инициализации, задержка вызвана ntpdateвременем его запуска.

Это одна из самых распространенных ошибок при настройке NTP. Цель использования ntpdate— чтобы ntpdне выходить с ошибкой при запуске. Он делает это, если обнаруживает, что разница во времени очень большая. Однако ntpdимеет возможность игнорировать эту разницу во времени только один раз. Поэтому, включив его, ntpdateбольше не нужно.

Решением в таком случае будет отключить ntpdateи использовать эту функцию.

Для этого вам нужно всего лишь создать /etc/default/ntpdследующее:

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

Для NTPDATE_BIN="-"этой части сценария инициализации:

if [ -x $NTPDATE_BIN ] ; then

Он проверит, есть ли файл с именем, -который является исполняемым, но его там нет, поэтому он пропустит этот раздел.
 

Для этого есть DAEMON="/usr/sbin/ntpd -g":

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

Это приведет ntpdк вызову как ntpd -g. -gПараметр — это параметр, который сообщает ему, что нужно разрешить большую разницу во времени.

решение2

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 выполняется при загрузке независимо от всего, если он найден как исполняемый. Если вы хотите прекратить это поведение, вам следует удалить ntpdate с помощью имеющегося у вас менеджера пакетов или вручную переместить двоичный файл.

Изменение скрипта также является вариантом, но при обновлении он, скорее всего, будет перезаписан.

Связанный контент