В настоящее время я пытаюсь сократить время загрузки встроенной системы Linux. Один из способов, который мы решили сделать, — отложить скрипт ntp init.d.
Демон пытался синхронизироваться с сервером через соединение Ethernet. Но у нас не всегда есть это соединение, и загрузка занимает много времени, пока он пытается синхронизироваться. В нашей системе ntp не имеет решающего значения, поэтому его можно запустить позже.
Я хотел сделать так, чтобы скрипт ntpd init.d ждал около 5 минут, но не блокировал остальную часть операции загрузки.
Это S49 в папке init.d, которую я использую:
#! /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 с помощью имеющегося у вас менеджера пакетов или вручную переместить двоичный файл.
Изменение скрипта также является вариантом, но при обновлении он, скорее всего, будет перезаписан.