Можно ли проверить состояние NTPd в системе Busybox?
Мне нужно знать, надежна ли текущая дата / время в небольшой встроенной системе Linux на базе Busybox.
У меня работает Busybox ntpd, но, видимо, нет программы для запроса статуса.
В более обычной установке Linux я бы использовал ntpdc, ntpq, ntpstat или даже timedatectl, но ничего из этого не доступно в этой системе Busybox/Buildroot.
Что еще я могу сделать?
1 ответ
BusyBox не предоставляет интерфейсы IPC/RPC, необходимые для запроса состояния запущенного демона BusyBox NTP, поэтому даже если вы установите одну из упомянутых утилит запросов, они не смогут общаться с BusyBox.
ntpd
.
Бег
ntpd -w
как упоминалось в другом ответе, просто запустит еще один BusyBox
ntpd
экземпляр с нуля, и этот новый не будет разговаривать с уже запущенным
ntpd
процесс.
Однако есть другой способ получить информацию о статусе из BusyBox.
ntpd
, используя его интерфейс программы / сценария. Смотрите флаг -S:
~# ntpd --help
BusyBox v1.30.1 () multi-call binary.
Usage: ntpd [-dnqNwl] [-I IFACE] [-S PROG] [-p PEER]...
NTP client/server
-d Verbose (may be repeated)
-n Do not daemonize
-q Quit after clock is set
-N Run at high priority
-w Do not set time (only query peers), implies -n
-S PROG Run PROG after stepping time, stratum change, and every 11 min
-p PEER Obtain time from PEER (may be repeated)
-l Also run as server on port 123
-I IFACE Bind server to IFACE, implies -l
Указанная программа будет выполняться регулярно в зависимости от различных временных событий, и информация NTP предоставляется в виде аргументов программе и ее среде. Я не нахожу информации об этом интерфейсе, поэтому в этом случае исходный код выглядит как документация:
https://git.busybox.net/busybox/tree/networking/ntpd.c
Найдите функцию
run_script()
и вы можете видеть, что он вызывает внешнюю программу с
action
как аргумент и
stratum
,
freq_drift_ppm
,
poll_interval
и
offset
как переменные среды.
Скорее всего, ваш встроенный дистрибутив Linux уже подключается к этому интерфейсу. В моем окне OpenWrt
ntpd
работает с этой командной строкой:
/usr/sbin/ntpd -n -N -S /usr/sbin/ntpd-hotplug -p 0.openwrt.pool.ntp.org -p 1.openwrt.pool.ntp.org -p 2.openwrt.pool.ntp.org -p 3.openwrt.pool.ntp.org
и, как вы можете видеть, интерфейс программы подключается к поддержке горячего подключения OpenWrt procd. В OpenWrt это означает, что вместо этого вы добавляете свои сценарии NTP в
/etc/hotplug.d/ntp
но информация, предоставленная вашему сценарию, осталась прежней, см. раздел NTP здесь:
ntpd -w
предоставит некоторую информацию, такую как текущее смещение от ваших серверов NTP.