如何使用 systemd 检查硬件看门狗的状态?
util-linux
您可以使用打印wdctl
一些信息的命令,但这并不总是有效(例如在 Raspberry Pi 3 或更高版本上)。以 Pi 3 为例:
# wdctl /dev/watchdog0
wdctl: cannot read information about /dev/watchdog0: No such file or directory
# wdctl /dev/watchdog
wdctl: cannot read information about /dev/watchdog: No such file or directory
然而看门狗似乎是活跃的:
# dmesg | grep watchdog
[ 6.985782] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
[ 17.190956] systemd[1]: Using hardware watchdog 'Broadcom BCM2835 Watchdog timer', version 0, device /dev/watchdog
[ 17.206391] systemd[1]: Set hardware watchdog to 15s.
那么是否有一个 systemd 特定的命令可以用来显示硬件看门狗的当前状态以及 systemd 本身正在用它做什么呢?
请注意,旧的看门狗服务不再适用,因为这是在 systemd 获得本机硬件看门狗支持之前:
# systemctl status watchdog
Unit watchdog.service could not be found.
我正在执行一个命令,该命令提供了与 类似的信息wdctl
,其中看门狗定时器处于活动状态、正在使用中,以及当前超时设置为多少。有点像systemctl list-timers
但对于硬件看门狗。
答案1
看门狗是专用设备。这解释了您报告的 wdctl 输出。
但是,所有看门狗设备都将其设置导出到 /sys
然后您应该能够在 /sys/class/watchdog/* 下找到它们
如果你想要一个命令,那么可以满足grep . /sys/class/watchdog/*/*
你的需要吗?
答案2
我想知道同样的事情并浏览类似的问题,我得出以下结论:
sudo strace -t -e ioctl -p1 | grep WDIOC_KEEPALIVE
在超时间隔的一半处,您应该看到类似以下内容:
01:15:47 ioctl(9, WDIOC_KEEPALIVE) = 0
...
这用于strace
监视pid 1
( systemd init
) 进程中的所有 ioctl 调用,然后过滤掉WDIOC_KEEPALIVE
. systemd 用于WDIOC_KEEPALIVE
“ping”看门狗硬件并防止其导致重新启动。