Raspberry PiにハードウェアWatchdogを設定してみましょう
Raspberry PiとRaspbian OSには、Watchdog Timer(ウォッチドッグタイマー、以下Watchdogと記します)と呼ばれる機構が入っています。これは、システムが動作していないと判断された時に、自動的にRaspberry PiがOS再起動をを行うというものです。
Raspbian Jessieより前のバージョンでは、Watchdogを設定するためにすでに確立したやり方があったようです。しかし、Raspbian Jessieになってからは、モジュールの名前が変わったりしたほか、Watchdogを有効にさせる方法も変わったりしていて、これというやり方がすぐには見つからないようです。Raspberry Piのフォーラムでもいくつか投稿があるようですが、その中で他の方法に比べてとてもシンプルな方法が投稿されていました。この投稿の内容をを実際に試したところ、うまく動作しましたのでこちらで紹介します。この方法の良いところは、追加でソフトウェアを入れる必要がないところです。設定ファイルの変更や作成だけでハードウェアWatchdogを実現できてしまいます!
本記事の前半は、CANDY Pi Lite(下の写真の基板です)に関係なくRaspberry Pi共通の話題としてWatchdogの設定方法を紹介します。また、後半はCANDY Pi Liteを利用される方向けに、Raspberry Piで簡単にハードウェアWatchdogをセットアップする方法を紹介します。
Watchdog設定方法
【対象となるOS】
これから紹介するWatchdogを有効化する方法は、Raspbian JessieとStretchのみ対応しています。それよりも古いOSでは動作しません。 なお、こちらの検証ではRaspbian Stretchを使いました。
【検証したハードウェア】
こちらの検証では、Raspberry Pi 3 Model Bを使っています。他の機種は試していませんが、Raspberry Piはどれも同じチップ(BCM2835/BCM2836)を使っていますから、Raspberry Pi Zeroなどでも動作するでしょう。
【具体的なやり方】
まず最初に、/boot/config.txtにWatchdogを有効にする設定を追加します。 エディターでファイルを開いて、以下の行を追加してください。
dtparam=watchdog=on
続いてWatchdogを動かすカーネルモジュールの設定を行います。 /etc/modprobe.d/bcm2835-wdt.confというパスにファイルを作成しましょう。 初めて設定するときはこのファイルは存在していませんので、新たに作成する必要があります。 このファイルは、特権ユーザーで作成しなければなりません(例えばsudo gedit /etc/modprobe.d/bcm2835-wdt.confのようにsudoが必要です)。
ファイルを作成したら、以下の1行を入力します。
options bcm2835_wdt heartbeat=14 nowayout=0
これは、14秒のハートビートをWatchdogが期待するという設定になります。14秒以内にハートビートが来ないときは、システムが異常であると判断するというものです。
最後に、systemdの設定を変更します。systemdは、そのハートビートを行う機能を持っています。ただ初期設定では無効になっていますのでこれを有効にします。
設定変更するファイルは/etc/systemd/system.confとなります。これもsudoを使うなど特権ユーザーで編集します。
エディターでファイルを開いたら、下記のようなコメントアウトされている設定を探しましょう。
#RuntimeWatchdogSec=0
これを以下のように変更します。
RuntimeWatchdogSec=14
これにより、systemdが14秒以内の間隔でハートビートを行うようになります。
変更して保存したら、準備は完了です。
【実際に動かしてみましょう】
設定を全て行ったら、Raspberry Piを再起動させましょう。再起動コマンドの代わりに電源OFF、電源ONでも大丈夫です。
再起動を行ったらまずはWatchdogが有効になっているかみてみましょう。ターミナルを開いて次のコマンドを実行してください。
dmesg | grep bcm2835-wdt
これを実行して以下のように表示されていればOKです。左側のカッコ内の数字は必ずしも同じとは限りませんので数字違いについては気にしないでください。 ただ、もし何も出て来ないときは、うまく設定できていないので、もう一度上記のやり方を見直してみましょう。
[ 0.722030] bcm2835-wdt 3f100000.watchdog: Broadcom BCM2835 watchdog timer
それでは、実際にWatchdogによる再起動を発動させてみましょう。 ターミナルに以下のコマンドを入力して実行してみてください。
⚠️きけん・ちゅうい⚠️ Watchdogを設定せずに行うと、電源を落とす以外に元に戻す方法はなくなります‼️
:(){ :|:& };:
この顔文字のようなコマンドは、フォークボム(フォーク爆弾)と呼ばれるもので、システムの内部で新しいプロセスをどんどん増殖させる極めて危険なコマンドです。 通常はこのようなコマンドを使うことはありませんが、今回はシステム上の問題を引き起こすために使用します。
さて、これを入力すると徐々にシステムの動作が遅くなっていきます。最終的にコマンド入力に反応しなくなり、約2分程度経過すると再起動されます(再起動までの時間は、システムの負荷の状況によるので、負担の大きいシステム稼働状況ではもっと早く再起動するかもしれません)。
なぜ14秒と指定したのに2分も再起動までかかるのでしょうか? それは、このフォークボムが行われている間も、システム自体はなんとか動き続けているためです。フォークボムによって、いよいよリソースがなくなって14秒以内にハートビートができなくなるという瞬間になるまで、約2分の時間がかかっているのです。
【Watchdogを無効にするには?】
もし、なんらかの理由でWatchdogを再び無効にしたいときはどうすれば良いでしょうか。
この場合は、単純に/boot/config.txtにおいてonとした箇所をoffにするだけで良いです。/bootの下にあるファイルなので直接SDカードリーダーからPCなどでファイルを変更することもできますね。
dtparam=watchdog=off
設定を変更した後は再起動してください。
【前半まとめ】
以上が、Raspberry Piを利用したハードウェアWatchdogの設定有効化、無効化のやり方です。 以前のRaspbianのバージョンでは、Watchdogを使うために別のソフトウェアをインストールしなければならなかったのですが、このように設定を変更したり作成したりするだけで簡単にハードウェアWatchdog機能を使うことができるようになっています。
RaspberryPiを長期間、ずっと動かし続けるような運用を考えている方にとってはとても強力な機能になるでしょう。
続いて後半編です。
CANDY Pi Liteのセットアップ時にWatchdogを設定してみましょう
ここからは、CANDY Pi Liteをお使いの場合にWatchdogを簡単に設定できるようにする方法を紹介します。
CANDY Pi Liteをお使いの場合、専用のソフトウェアcandy-pi-liteサービスを利用します。バージョン1.6.0から、このソフトウェアをインストールする時に、Watchdogの設定も同時に行えるようになりました。
今回はこのバージョン1.6.0のソフトウェアをインストールして、同時にWatchdogの設定も行ってみましょう。
【インストールしてみましょう】
CANDY Pi LiteをRaspberry Piに取り付けて電源をいれてみてください。起動したら、ログインしてターミナルを開くか、SSHでログインしましょう。
もしすでに以前のバージョンのcandy-pi-liteサービスをいれている場合は、最初にアンインストールします。 初めてインストールする方は、この手順は不要です。
candy-pi-liteのアンインストール
sudo /opt/candy-line/candy-pi-lite/uninstall.sh
アンインストールしたら一旦再起動しましょう。
sudo reboot
candy-pi-liteのインストール
それでは、最新のcandy-pi-liteサービスを入れてみましょう。
curl -sL https://git.io/v7bXx | sudo ENABLE_WATCHDOG=1 bash
これを実行すると、、、
Collecting candy-board-cli Installing collected packages: candy-board-cli Successfully installed candy-board-cli-2.0.0 Collecting candy-board-qws (途中省略) [INFO] Configuring ufw... Firewall stopped and disabled on system startup Skipping adding existing rule Skipping adding existing rule (v6) Skipping adding existing rule Skipping adding existing rule (v6) Skipping adding existing rule Skipping adding existing rule (v6) Firewall is active and enabled on system startup [INFO] Configuring SC16IS7xx... [INFO] SC16IS7xx configuration done [INFO] Configuring Hardware Watchdog... [INFO] Hardware Watchdog configuration done [ALERT] *** Please reboot the system (enter 'sudo reboot') ***
こんな風に出てきます。最後に再起動を促されますから、再起動を行いましょう。
sudo reboot
Watchdog機能が有効かどうかをチェック!
先ほど記したように、以下のコマンドで有効になっているかどうかを調べることができます。 再起動してターミナルへ入ることができたら、以下のコマンドを実行してみましょう。
dmesg | grep bcm2835-wdt
以下のようなメッセージは見つけられますか?
[ 0.722030] bcm2835-wdt 3f100000.watchdog: Broadcom BCM2835 watchdog timer
見つかれば成功です!
これで、3GやLTEを付けっ放しにしても、不測の事態がRaspberryPiで起きて止まったままになることを避けられるようになります。 SDカードのデータがおかしくなってしまったり、電源が落ちてしまったらどうしようもないんですけど、とは言ってもこれでRaspberryPiがだいぶ頼りになる存在になりますよ!











