xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

如何启用树莓派的硬件看门狗功能,让它在系统宕机时可以自动重新开机 All In One

如何启用树莓派的硬件看门狗功能,让它在系统宕机时可以自动重新开机 All In One

Raspberry Pi watchdog

image

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出新的行程,造成系统当机:

: () { : | : &  } ;:

正常来说,执行这个指令稿之后,系统就会马上当住,您可以透过这个方式测试看门狗是否会让系统重新启动。

请不要在一般的Linux 主机上执行fork-bombs,它会造成系统当机!

正常在执行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, 禁止转载 🈲️,侵权必究⚠️!


posted @   xgqfrms  阅读(222)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示