很多时候,当我重新启动时,我会收到以下错误消息:
kernel: watchdog watchdog0: watchdog did not stop!
我试图通过执行 来了解有关看门狗的更多信息man watchdog
,但它说没有手动输入。我尝试了一下yum list watchdog
,发现没有安装。然而,当我查看/dev
目录时,我实际上发现了两个看门狗:
watchdog
和watchdog0
我好奇。我真的拥有看门狗吗?为什么内核抱怨当我重新启动时它没有停止?
答案1
大多数现代 PC 硬件都包含看门狗定时器设施。您可以通过维基百科在这里阅读有关它们的更多信息:看门狗定时器。同样来自 Linux 内核文档:
摘录-https://www.kernel.org/doc/Documentation/watchdog/watchdog-api.txt
看门狗定时器(WDT)是一种硬件电路,可以在软件故障时重置计算机系统。你可能已经知道了。
通常,用户空间守护程序会定期通过 /dev/watchdog 特殊设备文件通知内核看门狗驱动程序用户空间仍然处于活动状态。当这样的通知发生时,驱动程序通常会告诉硬件看门狗一切正常,并且看门狗应该再等待一段时间来重置系统。如果用户空间出现故障(RAM 错误、内核错误等),通知将停止发生,并且硬件看门狗将在超时后重置系统(导致重新启动)。
Linux 看门狗 API 是一个相当特殊的结构,不同的驱动程序实现不同的、有时甚至是不兼容的部分。该文件试图记录现有的用法并允许未来的驱动程序编写者将其用作参考。
此问答题为,谁在刷新Linux中的硬件看门狗?,涵盖了Linux内核和硬件看门狗定时器之间的联系。
看门狗包怎么样?
IMO,RPM 中的描述非常清楚。该watchdog
守护进程可以充当软件看门狗,也可以与硬件实现进行交互。
看门狗程序可以用作功能强大的软件看门狗守护程序,也可以与硬件看门狗设备交替使用,例如与常驻基板管理控制器 (BMC) 的 IPMI 硬件看门狗驱动程序接口。 watchdog 定期写入 /dev/watchdog;写入 /dev/watchdog 之间的间隔可通过 watchdog sysconfig 文件中的设置进行配置。
该配置文件还用于将看门狗设置为硬件看门狗,而不是默认的软件看门狗操作。在任何一种情况下,如果设备打开但未在配置的时间段内写入,看门狗定时器到期将触发机器重新启动。当作为软件看门狗运行时,重新启动的能力将取决于机器的状态和中断。
当作为硬件看门狗运行时,机器将经历由 BMC 发起的硬重置(或配置为在看门狗定时器到期时采取的任何操作)。
答案2
附带说明,要搜索手册,您可以执行以下操作:
man -k watchdog
任何至少在名称或标题/描述中使用该词的手册都将显示在您的控制台中。如果您期望有很多选项,您可能需要将其与less
以下内容一起使用:
man -k watchdog | less
但在我们的例子中,您可能不会获得超过 2 或 3 个条目。
这显示了一个名为 的实用程序wdctl
,允许您查看看门狗的当前状态/设置。以下是我正在使用的 Jetson 开发板之一的示例:
$ wdctl
Device: /dev/watchdog
Identity: Tegra WDT [version 1]
Timeout: 120 seconds
Pre-timeout: 0 seconds
FLAG DESCRIPTION STATUS BOOT-STATUS
KEEPALIVEPING Keep alive ping reply 0 0
MAGICCLOSE Supports magic close char 0 0
SETTIMEOUT Set timeout (in seconds) 0 0
我们可以看到该Timeout
条目告诉您看门狗在强制自动重新启动之前将等待多长时间。
在较新版本的 Linux 中,这是通过systemd
.查看/etc/systemd/system.conf
在哪里可以找到几个参数(通常默认情况下被注释掉):
[Manager]
...
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min
...
笔记:如果对您来说更方便,您还可以使用apropos
命令行工具而不是man -k
.它做同样的事情,尽管-k
在这种情况下不需要。
apropos watchdog
默认情况下,关键字(watchdog
在本例中)也可以是正则表达式。