Raspberry Pi ZeroにWatchdogを設定する
はじめに
自宅の室温監視用のラズパイが、気がつくと死んでいることが何度かありました。
原因を調べてもよくわからず、とりあえず電源OFF→ONで復帰するので、
それならwatchdogでもつければいいのでは?と思い立ったので、作業のメモ。
Watchdog基板つけなくてもSoCにWatchdog付いてるじゃん
外部watchdogを考えていましたが、RaspberryPi ZeroのSoC(BCM2835)には内蔵watchdog付いてるんですね。
しかし公式なドキュメントが全く出てこない・・・。
$ ls -al /dev/watchdog* crw------- 1 root root 10, 130 5月 28 12:17 /dev/watchdog crw------- 1 root root 250, 0 5月 28 12:17 /dev/watchdog0
/devにwatchdogという名前のなにかがいるのでwatchdogと呼ばれているなにかがありそうだけど。。
公式ドキュメントでwatchdogについて言及されているところとか知っている人いたら教えてください。
とりあえず他の人に前ならえする
絶対良くないんだけど、やるだけやってみることにする
参考にしたのは以下のサイト様たち
RaspberryPi 1BでBCM2835内蔵のウォッチドッグを有効にした - 悪霊にさいなまれる世界 -The Demon-Haunted World
Raspberry PiにハードウェアWatchdogを設定してみましょう | CANDY LINE Blog
手順
1. watchdogを有効化
/boot/config.txt
を開いて以下の1行を追加する
dtparam=watchdog=on
2. watchdogのタイムアウト時間を設定
/etc/modprobe.d/bcm2835-wdt.conf
を開く(ない場合は新規で作成)
以下の1行を追加する。
これでどうやら15秒間ハートビートを待つ(15秒間に1度もハートビートが無いとwatchdogが発火する)らしい。
options bcm2835_wdt heartbeat=15 nowayout=0
3. ハートビート送信間隔の設定
/etc/systemd/system.conf
を開いて以下を探してコメントアウトを解除し、設定値を変更する。
これでsystemdがハートビートを5秒以内に1度送信してくれるらしい。
正常時はwatchdogのタイムアウトまで2回は通知されるようにしたいので、
ワーストケースを考えて5秒にした。
//↓これを探す #RuntimeWatchdogSec=0 //↓これを追加 RuntimeWatchdogSec=5
4. 再起動で設定が反映される
再起動後、fork爆弾を使ってwatchdogのテストをしてみる。
$ :(){ :|:& };:
実行後すぐterminalの応答が返ってこなくなり、数分後に自動的に再起動することが確認できる。
最後に
公式のwatchdogについて書かれているドキュメントをご存じの方、教えてください。