推迟 ntpd

推迟 ntpd

我目前正在尝试缩短嵌入式 Linux 系统的启动时间。我们认为可以做到这一点的一种方法是推迟 ntp init.d 脚本。

守护进程尝试通过以太网连接与服务器同步。但我们并不总是保持这种连接,并且在尝试同步时需要很长时间才能启动。在我们的系统中,ntp并不重要,因此可以稍后启动。

我想做的是让 ntpd init.d 脚本等待大约 5 分钟,但不阻止其余的启动操作。

这是我正在使用的 init.d 文件夹中的 S49:

    #! /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 会在启动时独立于所有内容执行。如果您想停止此行为,您应该使用您拥有的包管理器删除 ntpdate 或手动移动二进制文件。

修改脚本也是一种选择,但如果您更新它可能会被覆盖。

相关内容