Назад | Перейти на главную страницу

Можно ли проверить статус NTPd в системе Busybox?

Мне нужно знать, надежны ли текущие дата / время в небольшой встроенной 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 здесь:

https://openwrt.org/docs/guide-user/base-system/hotplug

ntpd -w предоставит некоторую информацию, например текущее смещение от ваших серверов NTP.