推遲 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 或手動移動二進位檔案。

修改腳本也是一種選擇,但如果您更新它可能會被覆寫。

相關內容