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="-"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를 제거해야 합니다.

스크립트를 수정하는 것도 옵션이지만 업데이트하면 덮어쓰게 될 가능성이 높습니다.

관련 정보