Мне нужно знать, надежны ли текущие дата / время в небольшой встроенной Linux-системе на основе Busybox.
У меня работает Busybox ntpd, но, по-видимому, нет программы для запроса статуса.
В более обычной установке Linux я бы использовал ntpdc, ntpq, ntpstat или даже timedatectl, но ни один из них не доступен в этой системе Busybox / Buildroot.
Что еще я могу сделать?
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.