在计算机中,「看门狗」指的是一种硬件计时器,用于在计算机失去响应(死机)的时候重启计算机。计算机的系统上要运行一个程序不断和看门狗硬件通信。当通信中断经过一段预设的时间后,看门狗就会通过发送 RESET 信号或者切断再接通电源等方式强制重启,保证计算机上运行的服务不长时间中断。
在折腾树莓派的过程中,我也曾好几次让树莓派失去响应,结果不得不人工开关电源来重启。通过开启树莓派上的硬件看门狗功能,就可以减少这种情况的出现。
加载驱动
由于 Linux 「万物皆文件」的特点,可以通过 ls 命令直接查看看门狗驱动的状态:
ls /dev/watchdog
如果有这个文件,可以直接跳到下一部分。如果没有,就要根据树莓派版本加载驱动:
- 树莓派 1代的驱动名为:bcm2708_wdog
- 树莓派 2代的驱动名为:bcm2709_wdog
- 树莓派 3代的驱动名为:bcm2835_wdt
使用 modprobe -v [驱动名]
加载驱动,然后再 ls /dev/watchdog
查看情况。如果驱动加载成功,就要将这个驱动设置为开机加载。编辑 /etc/modules
,另起一行填入驱动名就可以了。
安装通信软件
前面提到,硬件看门狗需要和软件通信来确定系统的状态。在 Raspbian 下这个软件是 watchdog,可以直接 apt-get 安装:
apt-get install watchdog
然后由于显而易见的原因,要把它设置为开机启动:
systemctl enable watchdog
然后编辑配置文件 /etc/watchdog.conf
,作出如下修改:
- 取消 #max-load-1 = 24 的注释(删除开头的 # 号),代表当系统 1 分钟内的负载高于 24(已经非常非常高了),就重启系统
- 取消 #watchdog-device = /dev/watchdog 的注释,设置看门狗的路径
- 增加一行 watchdog-timeout = 15,代表 15 秒内系统无响应就重启系统,在树莓派 3B 上这个值最高为15。注意不要设置的太小,否则可能造成系统反复重启。
保存修改,重启看门狗服务:
service watchdog restart
看门狗功能就启用了。
测试
可以通过 kill 掉看门狗服务来模拟系统死机的情况:
pkill -9 watchdog
pkill -9 wd_keepalive
过 15 秒后树莓派就会自动重启。