你是否遇過 Raspberry Pi 異常死掉呢? 我遇過,而且非常多次
會造成 Raspberry Pi 當掉的原因有很多,比如電源供電不足、電源線阻抗 太大,造成提供的電壓不夠、有零件故障、瑕疵品……等,當然也有可能是 Raspberry Pi 在台灣水土不服所導致,有興趣的話使用 Raspberry Pi freeze 這樣的關鍵字去收尋,就可找到非常多的討論串。
那既然手邊的 Raspberry Pi 會當掉,那要怎辦呢?總不能一旦他掛掉,就手動
重新啟動吧? 這時候就是 watchdog
出馬的時候啦 ~
Watchdog,中文譯為 看門狗
,這是一種用於判斷系統是否有正常運作的程式,每
隔固定的間隔就會運作,若系統異常,則重啟系統。
Raspberry Pi 使用的 BCM2708 內建有硬體版的 watchdog 模組,我們可以透
過 Linux Kernel 的 bcm2708_wdog
模組來控制 Raspberry Pi 的 watchdog,
達到當機後進行重新開機的功能。
開機後自動載入 watchdog 模組
要啟用 watchdog 功能,首先要記得載入相對應的 kernel module,因此我們編
輯 /etc/modules
,並將裡面內容修改成如下
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. # Parameters can be specified after the module name. snd-bcm2835 bcm2708_wdog
當然如果希望馬上就啟用 watchdog,而不是等到下次重開機後才有用的話,則要 記得手動載入模組
root@raspberrypi:/home/pi# modprobe bcm2708_wdog
安裝使用 watchdog 的程式
接下來則是要安裝和 watchdog 相關的程式。
疑?前面不是說過 Raspberry Pi 具有 硬體的 watchdog 模組,為何還要安裝程式呢?事實上這個 userspace 的程式是用 來定時向 watchdog 模組匯報目前的狀況,好讓 watchdog 知道不需要將系統進行重 啟的動作。
root@raspberrypi:/home/pi# apt-get install watchdog
設定 watchdog 程式
安裝完 watchdog 程式之後,我們必須修改一下 /etc/watchdog.conf
這個設定
檔,並將以下註解取消
watchdog-device = /dev/watchdog
這個設定是用來設定 watchdog
這個軟體程式要監控的 device node,好讓程
式可以知道要向誰進行回報,在 Raspberry Pi 裡面,預設的就是 /dev/watchdog
。
除了這項設定外,在 /etc/watchdog.conf
還有許多有用的設定,大體如下
監控系統負載
我們可以監控系統的 loadavg,假設系統負載過高,則透過 watchdog 將系統重 啟。
# Uncomment to enable test. Setting one of these values to '0' disables it. # These values will hopefully never reboot your machine during normal use # (if your machine is really hung, the loadavg will go much higher than 25) max-load-1 = 24 max-load-5 = 18 max-load-15 = 12
監控系統溫度
我們可以透過
/sys/class/thermal/thermal_zone0/temp
去監控 Raspberry Pi 的溫度,如以下設定,假如溫度超過 75ᵒC,則進行重啟。# Defaults compiled into the binary temperature-device = /sys/class/thermal/thermal_zone0/temp max-temperature = 75000
而之所以會在
max-temperature
欄位設定成 75000,這是因為在/sys/class/thermal/thermal_zone0/temp
裡面紀錄的溫度,單位為千分 之一攝氏度
,所以設定為 75000 則代表 75ᵒC。
讓系統啟動時自動執行 watchdog
除了讓 kernel 載入 bcm2708_wdog
模組外,我們也需要記得在開機的時候,
自動啟動 watchdog 程式,這時候就可以透過 Debian 標準的方式,將 watchdog
程式加入到 init 程式裡面
root@raspberrypi:/home/pi# update-rc.d watchdog defaults update-rc.d: using dependency based boot sequencing
相同的,若你希望現在開始就啟動 watchdog,則這樣作
root@raspberrypi:/home/pi# /etc/init.d/watchdog start [ ok ] Stopping watchdog keepalive daemon.... [ ok ] Starting watchdog daemon....