Linux看门狗喂狗
在通常情况下,无论是arm设备还是正常的x64的PC,Linux下都会有一个叫/dev/watchdog
的设备
据说,内核会自动喂他,但是经过咩咩多次的死机经验来看,他喂了跟没喂一样,优先级过高了,系统卡死了也不重启
还有安装一个叫watchdog的程序来喂,依然是实时性过高,导致卡死不重启
据说,超时时间是1分钟,但实测在s905l和s905l3a上,30秒喂一次都会重启,20秒一次就没问题,因此就有了下面两种喂狗方式:
crontab法
sudo crontab -e
修改root的计划任务,加入这行
* * * * * echo 1 > /dev/watchdog; sleep 20; echo 1 > /dev/watchdog; sleep 20; echo 1 > /dev/watchdog
方便是很方便,缺点也显而易见,在dmesg
查看系统日志时会看到大量的
watchdog: watchdog0: watchdog did not stop!
但是这也是有效的,crontab的优先级并不高,系统卡死的时候crontab会不准时或卡死堆积起来同时执行多次
Python法
由于Linux大量依赖python的程序,所以Linux中一般都自带python3或者python2.7
鉴于可能出现系统负载爆炸但是这程序还活着的情况,顺便监视一下5分钟平均负载
新建linuxWatchdog.py
,写入内容
# coding=utf-8
# Linux Watchdog
# v1.0
# Sparkle 20230130
import os, time
with open('/dev/watchdog', 'w') as d, open('/proc/loadavg', 'r') as l:
while True:
d.write("1")
d.flush()
l.seek(0)
if float(l.read().split()[1]) > 200:
break
time.sleep(15)
编辑/etc/rc.local
在exit 0
上加入
nice -n -19 python3 /root/linuxWatchdog.py &
这个程序会每15秒喂一次狗,并且使用最低的系统优先级来运行,尽可能做到卡死时他先死
网络检查
比如像cm311-1a运行armbian的情况下,网口在开机后可能会抽风,导致没有网络,需要重启或是插拔才能正常工作,那么就可以在crontab中加一条
*/5 * * * * ping -W 30 -c 1 -q baidu.com >/dev/null;if [ $? != 0 ];then reboot;fi
这样每5分钟都会ping一次检查网络是否连通,否则就重启
如果咩咩的文章对你有帮助,您可以 请我喝牛奶