現在、組み込み 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 回だけ無視する機能があります。したがって、これをオンにすると、は不要になります。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 を削除するか、バイナリを手動で移動する必要があります。
スクリプトを変更することも選択肢の 1 つですが、更新すると上書きされてしまう可能性があります。