ntpdの延期

ntpdの延期

現在、組み込み Linux システムの起動時間を短縮しようとしています。これを実現する方法の 1 つは、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

init スクリプトが示すように、遅延はntpdate起動時に発生します。

これは、NTP を設定するときに最もよくあるエラーの 1 つです。 を使用する目的は、起動時にエラーで終了しないようntpdateにすることです。時間差が非常に大きいことが検出された場合にこれを行います。ただし、この時間差を 1 回だけ無視する機能があります。したがって、これをオンにすると、は不要になります。ntpdntpdntpdate

解決策としては、ntpdateこの機能を無効にして使用することです。

/etc/default/ntpdこれを行うには、次のように作成するだけです。

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

NTPDATE_BIN="-"、init スクリプトのこの部分です。

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 を削除するか、バイナリを手動で移動する必要があります。

スクリプトを変更することも選択肢の 1 つですが、更新すると上書きされてしまう可能性があります。

関連情報