Zio*_*yte 5 monitoring busybox ntpd
我需要知道当前日期/时间在基于 Busybox 的小型嵌入式 Linux 系统中是否可靠。
我正在运行 Busybox ntpd,但显然没有程序可以查询状态。
在更传统的 Linux 安装中,我会使用 ntpdc、ntpq、ntpstat 甚至 timedatectl,但这些在 Busybox/Buildroot 系统上都不可用。
我还可以做些什么?
小智 3
BusyBox 不提供查询正在运行的 BusyBox NTP 守护进程状态所需的 IPC/RPC 接口,因此即使您安装了上述查询实用程序之一,它们也无法与 BusyBox 通信ntpd。
正如另一个答案中提到的那样运行ntpd -w只会从头开始另一个 BusyBoxntpd实例,并且这个新实例不会与已经运行的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
Run Code Online (Sandbox Code Playgroud)
指定的程序将根据不同的时间事件定期执行,并且 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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,程序接口正在连接 OpenWrt 的 procd 热插拔支持。在 OpenWrt 中,这意味着您改为添加 NTP 脚本,/etc/hotplug.d/ntp但提供给脚本的信息仍然相同,请参阅此处的 NTP 部分:
https://openwrt.org/docs/guide-user/base-system/hotplug
| 归档时间: |
|
| 查看次数: |
7761 次 |
| 最近记录: |