狛ログ

2016年12月4日日曜日

Raspberry Pi 3 でウォッチドッグタイマーを使った自動再起動。


オフィス狛 技術部です。

IoT関連のプロジェクトでは、多く使われている Raspberry Pi 。
弊社でも、BLEソリューションや、その他実証実験などで、使っています。

Raspberry Pi 3 になって、性能も良くなっているのですが、
たまに不安定になって、フリーズしてしまう事があります。

メモリ不足になっているとか、要因は色々あるのですが、
常時稼働すべき用途の場合、フリーズしてしまうのは困ってしまいます。

と言う事で、ウォッチドッグタイマーの出番です。

ウォッチドッグタイマーとは

メインのプログラムがハングアップなどの不正な状態に陥ってしまい、規則的なウォッチドッグ操作(「犬をなでる」とも呼ばれる「サービスパルス」の書き込み)が行なわれなかった(タイムアウト)場合に、例外処理が実行される。例外処理は、ハングアップしたシステムを正常動作に戻すことを目的としてシステムをリセットする場合が多いが、電源切断によりシステムを強制停止させるものや電源を切断した後に再投入するものもある。
タイマーはソフトウェアではなく、ハードウェアを用いる。これは、ソフトウェアで実装してしまうと、ソフトウェア自体が故障した際にタイマーの役割を果たさなくなったり、リセット信号を発生できなくなってしまう恐れがあるためである。
障害を引き起こした問題のデバッグに役立つ情報などを媒体に保存する機能を持つ場合、ウォッチドッグタイマーはより複雑なこともある。たとえば、最初のウォッチドッグタイマーのタイムアウトによって開始された情報の保存処理がある時間内に完了しなかった場合、情報が保存されていてもいなくても、2番目のシンプルなウォッチドッグタイマーがシステムを確実にリセットさせる。ウォッチドッグタイマーが最も多く使われているのは組み込みシステムで、マイクロコントローラに内蔵されていることも多い。
「ウォッチドッグタイマー」『フリー百科事典 ウィキペディア日本語版』より。
2016年3月21日 (月) 08:29‎ UTC
URL: https://ja.wikipedia.org/wiki/ウォッチドッグタイマー

ウォッチドッグタイマーのインストールと設定

以降のコマンドは、root権限で実行してください。
(「su」でrootになるか、「sudo」をコマンドの頭に付ける)
また、OSは「Raspbian Jessie Kernel version:4.4」を想定しています。

以下のコマンドで、watchdogをインストールします。
$ apt-get install watchdog

サービスの登録を行う為に、「watchdog.service」ファイルを編集します。
$ vi /lib/systemd/system/watchdog.service
※「[Install]」の下に下記を追加して、保存後、ファイルを閉じます。
WantedBy=multi-user.target

自動起動設定を行います。
$ update-rc.d watchdog enable

カーネルモジュールをロードします。
$ modprobe bcm2708_wdog

watchdog.conf の編集を行います。
$ vi /etc/watchdog.conf
※以下の部分のコメントを外し、保存後、ファイルを閉じます。
#watchdog-device = /dev/watchdog

/etc/default/watchdog の編集を行います。
$ vi /etc/default/watchdog
※watchdog_module="none"の「none」を「bcm2708_wdog」に変え、保存後、ファイルを閉じます。

再起動します。
$ reboot

再起動後、以下のコマンドを実行し、自動で再起動すればOKです。
$ :(){ :|:& };:

今回、下記サイトを参考にしたのですが、ちょっと情報が古かったり、やり方がサイトによって微妙に異なっていたりしたので、
Raspberry Pi 3 の「Raspbian Jessie Kernel version:4.4」で、問題なく動作した方法を記載しています。

【参考】
http://ivis-mynikki.blogspot.jp/2015/03/raspberry-pi.html
http://ecoday.jp/881/raspberry-pi-2-にウォッチドッグタイマーを導入する%E3%80%82/
http://machiawasepoint.com/raspberry-pi-jessieにwatchdogをインストール/

0 件のコメント:

コメントを投稿