我需要知道当前日期/时间在基于 Busybox 的小型嵌入式 Linux 系统中是否可靠。
我有 Busybox ntpd 正在运行,但显然没有程序可以查询状态。
在更传统的 Linux 安装中,我会使用 ntpdc、ntpq、ntpstat 甚至 timedatectl,但在这个 Busybox/Buildroot 系统上这些都不可用。
我还可以做些什么?
我需要知道当前日期/时间在基于 Busybox 的小型嵌入式 Linux 系统中是否可靠。
我有 Busybox ntpd 正在运行,但显然没有程序可以查询状态。
在更传统的 Linux 安装中,我会使用 ntpdc、ntpq、ntpstat 甚至 timedatectl,但在这个 Busybox/Buildroot 系统上这些都不可用。
我还可以做些什么?
BusyBox 不提供查询正在运行的 BusyBox NTP 守护程序的状态所需的 IPC/RPC 接口,因此即使您安装了上述查询实用程序之一,它们也无法与 BusyBox 对话
ntpd
。如另一个答案中提到的那样运行
ntpd -w
只会从头开始另一个 BusyBoxntpd
实例,并且这个新实例不会与已经运行的ntpd
进程对话。然而,还有另一种从 BusyBox 获取状态信息的方法
ntpd
,即使用它的程序/脚本接口。查看 -S 标志:指定的程序将根据不同的时间事件定期执行,并且 NTP 信息作为 args 提供给程序及其环境。我找不到有关此接口的信息,因此在这种情况下,源代码似乎是文档:
https://git.busybox.net/busybox/tree/networking/ntpd.c
查找该函数
run_script()
,您可以看到它以、、和作为环境变量action
作为参数调用外部程序。stratum
freq_drift_ppm
poll_interval
offset
您的嵌入式 Linux 发行版可能已经挂接到此界面。在我的 OpenWrt 盒子
ntpd
上运行这个命令行:正如您所看到的,程序界面与 OpenWrt 的 procd hotplug 支持挂钩。在 OpenWrt 中,这意味着您改为添加 NTP 脚本,
/etc/hotplug.d/ntp
但提供给脚本的信息仍然相同,请参阅此处的 NTP 部分:https://openwrt.org/docs/guide-user/base-system/hotplug
ntpd -w
将提供一些信息,例如您的 NTP 服务器的当前偏移量。