15_看门狗是啥
约 1335 字大约 4 分钟
2026-04-09
什么是看门狗?
看门狗(Watchdog)是一种硬件或软件机制,用于监控系统运行状态。当系统出现严重故障(如内核崩溃、死锁)时,看门狗能够自动重启系统,防止系统永久挂起。 看门狗的工作原理实际上也非常简单,就是放一起自启程序来哪里工作,每隔一段时间CPU就要去吧自启程序的倒计时恢复,如果在倒计时结束之前,看门狗都没有收 到来自CPU的重置指令,则程序就会判断为机器已经异常了(CPU卡死了,内核panic了),于是就去重置机器。
为什么需要看门狗?
- 内核级故障恢复:当内核发生Panic或硬件死锁时,CPU停止执行指令。看门狗能在系统无响应时强制重启。
- 防止永久宕机:在无法通过SSH或Ping访问系统的情况下,提供自动恢复机制。
- 日志缺失问题:如果故障瞬间发生,日志可能来不及写入磁盘。看门狗确保系统能重启并记录事件。
为什么看门狗可以在CPU挂掉的时候还能工作?
首先,看门狗(Watchdog)之所以能在 CPU 挂掉时起作用,是因为它在物理设计上是独立于 CPU 核心的。
看门狗通常不是 CPU 内部的一个软件函数,而是一个独立的硬件计时器(Timer)。
- 在嵌入式芯片(MCU)中,它通常是一个独立的逻辑电路,拥有自己的时钟源。
- 在服务器领域,看门狗功能往往集成在 BMC(基板管理控制器) 或专门的硬件芯片中。
因此,即使 CPU 的指令流水线完全锁死(Deadlock)或停机(Halt),看门狗硬件电路依然不受影响,可以正常工作。它不需要 CPU 提供动力,它只需要 CPU 定期给它发一个“清零信号”,这个清零 信号也是我们常说'喂狗'。
更具体一点的工作原理是这样的: 看门狗倒计时结束(溢出)时,它会触发一个物理电平信号。这个信号通常连接到 CPU 的 RESET 引脚
软重启 vs 硬重启
- 软重启 (Warm Reset):不切断电源,通过软件指令或硬件信号重启CPU。从BIOS/UEFI开始引导。
- 硬重启 (Cold Reset):完全断电后上电重启,更彻底但耗时更长。
看门狗通常触发软重启,但可配置为硬重启(Power Cycle)。
如何配置看门狗?
以下配置方案结合内核参数和硬件驱动,实现系统死锁时的自动重启。适用于Debian/Ubuntu等Linux发行版。
1. Linux内核参数的看门狗
配置内核在发生致命错误时自动重启, sysctl.conf是Linux内核自带的自救逻辑,属于纯软件的。当内核检测到 Panic 或 Softlockup(软件死锁), 内核就会主动调用重启函数
# 编辑 /etc/sysctl.conf,添加以下参数
cat <<EOF >> /etc/sysctl.conf
# 发生内核恐慌(Panic)后 10 秒自动重启
kernel.panic = 10
# 发生致命错误(Oops)时直接触发 Panic
kernel.panic_on_oops = 1
# 发生软锁死(CPU被死占不放)超过阈值时触发重启
kernel.softlockup_panic = 1
EOF
# 立即生效
sysctl -p2. IPMI硬件驱动配置
加载服务器底层看门狗驱动(如IPMI)。
# 1. 加载 IPMI 看门狗驱动
modprobe ipmi_watchdog
# 2. 设置永久加载
echo "ipmi_watchdog" >> /etc/modules
# 3. 配置参数:5分钟超时,物理断电重启
echo "options ipmi_watchdog action=power_cycle timeout=300 panic_wdt_timeout=300" > /etc/modprobe.d/ipmi_watchdog.conf3. 安装与配置喂狗服务
安装watchdog服务,定期发送心跳信号。
# 1. 安装服务
apt update && apt install watchdog -y
# 2. 修改配置文件 /etc/watchdog.conf
# 启用设备和设置超时
sed -i 's/#watchdog-device/watchdog-device/g' /etc/watchdog.conf
sed -i 's/#watchdog-timeout/watchdog-timeout = 300/g' /etc/watchdog.conf
# 设置心跳间隔为10秒
echo "interval = 10" >> /etc/watchdog.conf
# 3. 启动服务并设置开机自启
systemctl enable --now watchdog4. 状态验证与监控
配置完成后,验证看门狗是否正常工作。
检查设备与心跳
# 确认硬件设备已识别
ls -l /dev/watchdog
# 确认内核模块参数为300秒
cat /sys/module/ipmi_watchdog/parameters/timeout
# 观察计时器跳动(数值应在290-300之间循环)
watch -n 1 "cat /sys/class/watchdog/watchdog0/timeleft"查看服务状态
systemctl status watchdog预期输出:Active: active (running),日志显示 watchdog now set to 300 seconds。
5. 故障复盘指令
如果发生非计划重启,使用以下命令检查是否为看门狗触发:
# 1. 检查 IPMI 硬件日志
ipmitool sel list | tail -n 20
# 2. 检查系统重启前的最后日志
journalctl -b -1 -e注意事项
- 超时设置:5分钟(300秒)是安全阈值,给BIOS自检和启动足够时间。
- 维护时禁用:升级内核或维护系统时,先停止看门狗:
systemctl stop watchdog,防止意外重启。 - 日志配置:确保Journal配置为持久存储(
Storage=persistent),避免重启后日志丢失。 - 兼容性:此配置适用于支持IPMI的服务器。不同硬件可能需要调整驱动。
通过以上配置,系统能在内核级故障时自动恢复,提高服务器可用性。
