6. 看门狗¶
看门狗(Watchdog)是一种用于监控系统健康状态的机制,它的主要功能是确保系统在发生故障时能够自动恢复或重启,从而提高系统的可靠性和稳定性。
6.1. 工作原理¶
定期“喂狗”:看门狗通过一个定时器来监控系统的运行,系统需要定期发送一个“喂狗”的信号,表明系统仍在正常运行。如果系统未能按时发送这个信号(可能由于系统崩溃或严重的错误),看门狗会认为系统出现了问题。
超时处理:如果看门狗超时没有接收到“喂狗”信号,它会采取预定义的措施,例如重启系统或执行其他恢复操作,这种机制可以确保系统在遇到不可恢复的错误时自动恢复运行。
6.2. 使用¶
6.2.1. 喂狗测试¶
LubanCat-RK3588系列板卡默认已经开启了看门狗,可以直接使用。
应用操作通过/dev/watchdog节点来控制watchdog,示例如下:
1 2 3 4 5 | # 写入除大写V以外的任意字符,用户喂狗
echo 1 > /dev/watchdog
# 写入大写V字符,系统自行喂狗
echo V > /dev/watchdog
|
默认系统会自动喂狗,如果向/dev/watchdog写入除大写V以外的任意字符则需要用户自行喂狗, 如果在44秒内没有继续写入字符进行喂狗,系统将会重启。
6.2.2. 使用shell脚本喂狗¶
以下示例使用shell脚本10s喂一次狗。
1 2 3 4 5 6 7 | #!/bin/bash
while true
do
echo 1 > /dev/watchdog
sleep 10
done
|
6.2.3. 使用C程序喂狗¶
以下使用C程序10s喂一次狗。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main(void)
{
int fd = open("/dev/watchdog", O_WRONLY);
int ret = 0;
if (fd == -1) {
perror("watchdog");
exit(EXIT_FAILURE);
}
while (1) {
ret = write(fd, "\0", 1); // 通过write来喂狗
if (ret != 1) {
ret = -1;
break;
}
sleep(10);
}
close(fd);
return ret;
}
|