是否可以在 Busybox 系統上檢查 NTPd 狀態?
我需要知道目前日期/時間在基於 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 標誌:~# 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 資訊作為 args 提供給程序及其環境。我找不到有關此介面的資訊,因此在這種情況下,原始碼似乎是文件:
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 hotplug 支持掛鉤。在 OpenWrt 中,這意味著您改為添加 NTP 腳本,
/etc/hotplug.d/ntp
但提供給腳本的資訊仍然相同,請參閱此處的 NTP 部分: