如何启用树莓派的硬件看门狗功能,让它在系统宕机时可以自动重新开机 All In One
如何启用树莓派
的硬件看门狗
功能,让它在系统宕机时可以自动重新开机 All In One
Raspberry Pi
watchdog
http://blog.gtwang.org/iot/raspberry-pi-hardware-watchdog/
树莓派
这里介绍如何启用树莓派的硬体看门狗功能,让它在系统宕机时可以自动重新开机。
树莓派(Raspberry Pi)是一个价格低、功能强大的迷你电脑,结合各种感测器(sensors)之后,即可收集各类的感测资料,非常适合应用于现今的物联网。
不过通常一般的感测器应用中,资料的收集与环境状况的监控都是长期性的,而且通常管理者都不会一直待在感测器旁边,如果负责收集资料的树莓派突然当机(不论是因为硬体或是软体等问题),又无法经由网路远端连线进去看状况时,唯一的解决办法就是让管理者跑到树莓派旁边手动重开机,这样的问题通常在物联网的应用中是很常见的。
为了避免这种当机后,手动重开机的麻烦,树莓派的硬体上内建了一个看门狗(watchdog)的功能,它可以自动监控系统的运行状况,当它发现系统卡在某个工作一直没办法跳出时,就会自动将系统重新开机。
看门狗的运作原理是在硬体上实作一个倒数计时器(countdown timer),当这个计时器数到零时,就会将系统重新开机,而在正常的系统运行时,系统上的软体会定期重设这个计时器,让它在正常的状况下永远不会数到零(重开机),如果系统发生问题时(当机),软体就会无法重设这个计时器,最后当计时器数到零的时候,就会自动重新开机了。
启用bcm2708_wdog
核心模组
要使用树莓派的硬体看门狗,首先启用bcm2708_wdog
这个核心模组,编辑/etc/modules
核心模组设定档,加入这一行:
bcm2708_wdog
这样在下次重新开机时,硬体看门狗模组就会自动载入。如果想要立即启用,可以执行:
sudo modprobe bcm2708_wdog
安装watchdog
监控Daemon
启用Linux的核心模组之后,我们还会需要一个软体的监控程式来配合才能组成完整的看门狗功能,最简单的方式就是直接使用watchdog
这个监控Daemon,它只要透过apt安装一下就可以立即使用了:
sudo apt-get install watchdog
安装好之后,编辑/etc/watchdog.conf
这个设定档,首先设定看门狗的设备档案(device file),将watchdog-device
注解拿掉:
watchdog-device = /dev/watchdog
接着设定想要监控的系统状态,您可以自由选择要监控哪一些。
系统负载(loading)
您可以设定系统负载的上限值,当watchdog
发现系统负载超过这个上限值的时候,就会让系统重新启动。
max-load-1 = 24 max-load-5 = 18 max-load-15 = 12
这里的数值是/etc/watchdog.conf
的预设值,正常来说如果系统真的当机的话,系统的负载慧远超过25
,这里所设定的数值在系统正常的状况下是不会重新启动的。当然您可以依照自己的状况来调整这个上限值。
CPU 温度
监控树莓派的CPU 温度,当温度太高时,则关机:
temperature-device = /sys/class/thermal/thermal_zone0/temp max-temperature = 80000
/sys/class/thermal/thermal_zone0/temp
中储存的数值是控树莓派的CPU温度,单位是摄氏千分之一度,我们这里设定让CPU在超过摄氏80ᵒC时重新启动。而watchdog
再温度达到这个数值的90%、95%与98%时,也会先发出警告。
记忆体
监控记忆体的使用量,当虚拟记忆体(virtual memory)太少时,则重新启动:
min-memory = 1
这里的记忆体单位是pages,您可以用getconf
查看自己系统的page size是多大:
getconf PAGESIZE
或是
getconf PAGE_SIZE
输出会类似这样
4096
以这个例子来说,一张page 的大小就是4096 bytes。
网路
监控某个IP 位址:
ping = 172.31.14.1
亦可用广播位址监控整个subnet 上的主机(这个要小心使用):
ping = 172.26.1.255
监控网路卡式否有流量:
interface = eth0
档案
监控档案是否可以正常存取,如果无法存取档案,则重新启动:
file = /var/log/messages
watchdog
会使用stat
检查档案,如果传回错误的话并不会重新启动,如果stat
在呼叫时卡住,超过一分钟之后watchdog
才 会将系统重新启动,这个状况通常会发生NFS挂载的档案系统上。
管理者Email
设定管理者的Email,让系统重新启动或是关机前,以Email 通知管理者:
admin = admin@gtwang.org
即时监控模式
在负载量比较大的系统中,watchdog
很容易被作业系统搬到记忆体的交换空间(swap),如果来不及搬回记忆体时,很容易造成系统不必要的重新启动,如果想避免这样的状况,可以启用即时监控模式(realtime),让watchdog
常驻在记忆体中:
realtime = yes
开机自动启动看门狗
先启动watchdog
常驻程式进行测试:
sudo service watchdog start
当确认设定没问题之后,就可以让watchdog
在开机时就自动启动:
sudo update-rc.d watchdog defaults
当机测试
安装好看门狗之后,可以用这个fork-bombs测试一下,执行这个指令之后,它会不停重复fork出新的行程,造成系统当机:
: () { : | : & } ;:
正常来说,执行这个指令稿之后,系统就会马上当住,您可以透过这个方式测试看门狗是否会让系统重新启动。
正常在执行fork-bombs之后,系统负载会在几秒之内迅速上升,然后重新开机,这是/var/log/daemon.log
:
Feb 16 14:14:56 raspberrypi watchdog[3818]: loadavg 88 18 6 is higher than the given threshold 24 18 12!
Feb 16 14:14:56 raspberrypi watchdog[3818]: /usr/lib/sendmail does not exist or is not executable (errno = 2)
Feb 16 14:14:56 raspberrypi watchdog[3818]: shutting down the system because of error -3
如果您对于树莓派的应用有兴趣,建议您可以继续阅读物联网的相关文章。
demos
refs
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/5357411.html
未经授权禁止转载,违者必究!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)