iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
1
自我挑戰組

資訊技術解戈迪安繩結系列 第 16

IT|維運管理|作業系統|Linux|Watchdog 確保 Raspberry Pi(樹莓派) 高可用性

Watchdog 確保 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....

參考連結


[1] Auto-reboot a hung Raspberry Pi using the on-board watchdog timer


上一篇
IT|軟體|VirtualBox 虛擬空間動態調整與 Port Forwarding
下一篇
IT|資料庫|Phoenix SQL 初識
系列文
資訊技術解戈迪安繩結29

尚未有邦友留言

立即登入留言