現在、組み込み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
初期化スクリプトに見られるように、ntpdate
開始にかかる時間のために遅延が発生します。
これは、NTPを設定する際に最も一般的な間違いの1つです。使用目的は、起動時にエラーなしで終了すること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を削除するか、バイナリを手動で移動する必要があります。
スクリプトを変更することもオプションですが、更新すると上書きされる可能性があります。