如何关闭/dev/watchdog文件时消除watchdog的日志消息?
解决watchdog接管时的"watchdog did not stop!"日志问题
问题背景
我使用硬件watchdog监控某进程的运行状态,进程挂起时触发系统重启。系统通过init.d脚本启动watchdog工具,后续目标进程需要接管watchdog控制权,因此要关闭watchdog工具,但此时日志中会出现如下警告:
[ 72.672542] watchdog: watchdog0: watchdog did not stop!
该日志的产生原因是内核启用了NOWAYOUT选项——文件关闭时自动停止的watchdog并非真正的硬件看门狗,该选项确保硬件看门狗不会因用户空间进程关闭设备而停止,因此关闭watchdog工具的设备文件时,内核会输出这条警告。
解决方案
方案1:通过syslog过滤屏蔽特定日志
如果使用rsyslog,可在配置文件(如/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf)中添加过滤规则,直接丢弃这条日志:
:msg, contains, "watchdog: watchdog0: watchdog did not stop!" ~
添加完成后重启rsyslog服务使配置生效:
service rsyslog restart
方案2:动态调整内核日志过滤
使用内核日志工具临时屏蔽这条警告(重启系统后失效):
dmesg --suppress-pattern="watchdog: watchdog0: watchdog did not stop!"
若需要永久生效,可将这条命令添加到接管watchdog的init.d脚本中,放在关闭watchdog工具的步骤之后执行。
方案3:避免关闭watchdog设备,直接接管控制权
修改init.d脚本与目标进程的启动逻辑,跳过关闭watchdog设备的步骤,直接复用已打开的设备连接:
- 调整watchdog工具的启动参数,使用
-f(前台运行)模式保持/dev/watchdog设备打开; - 通过进程间通信将已打开的文件描述符传递给目标进程;
- 目标进程启动后直接复用该文件描述符进行喂狗操作,无需关闭原watchdog工具的设备连接,从根源上避免触发内核警告。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

