현재 임베디드 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를 제거하거나 바이너리를 수동으로 이동해야 합니다.
스크립트를 수정하는 것도 선택 사항이지만 업데이트하면 덮어쓰게 될 수 있습니다.