ラズベリーパイのハング対策にウォッチドッグタイマーを設定

(カテゴリ: M2Mルーター, raspberry_pi, カメラ, 遠隔監視)

4ヶ月ぶりの投稿です。前回投稿では、電力監視の通信系を設置する説明をしました。その最後に「基盤をゆるがす不具合が。。。」という思わせぶりなことを書いたのでした。今回はその説明をします。

エネルギーボックス内概観-第2次配線

エネルギーボックス内概観 – 上部の裸の小型基板がラズベリーパイ2

 

■不具合内容

不具合とは、ラズベリーパイ(Linuxのボードです)がハングしてしまうことです。家では2週間程度は正常に動作していたものが、太陽光発電している現地に設置したところ、数日のうちにハングしてしまうことです。

症状としては、遠隔地からウェブアクセスしても応答がない状態になります。現地にいって直接にLANでつないでもSSH接続ができません。

■対策1

仕方ないので、まずは一日に一度 reboot するようにしました。しかし、効果は不完全でした。数日でハングしてしまいます。

■対策2

本来の製品化業務であればとことん原因究明をして根本対策をしないといけませんが、ここでラズベリーパイについてそれをやっていると人生が終わってしまいそうなのでそれはしないことにして、エンジニアとしてはあまりやりたくない対策ではありますが、ウォッチドッグタイマーを設定して対策とすることにしました。ウォッチドッグタイマーなんていうのは割れ鍋に蓋的対応であって、本当に最後の最後に安全のために入れるものと認識しています。したがって原因究明をおろそかにしてウォッチドッグタイマーに頼るというのは、もっともやってはいけないことと考えています。しかしながらラズベリーパイのLinux kernelやらUSBドライバーやらに踏み込んでいって、なかなか発生しない不具合の原因を解明していく作業は、私には能力と時間がないのでできません。

ということで言い訳が長くなりましたが、結論としてはウォッチドッグタイマーを設定することにしました。結果は、その後4ヶ月間、ハングなしで正常に稼動しています。

■ウォッチドッグタイマーの設定

この設定にもひとくせありました。細かいやりかたは下記のページを参考にしました。

[1] http://hanposaki.blog.so-net.ne.jp/2013-03-20

[2] https://linux.yebisu.jp/memo/999

[3] http://muplay.blog.so-net.ne.jp/2014-08-11

[4] http://raspberrypi.stackexchange.com/questions/33850/pi-b-raspbian-jessie-watchdog-doesnt-start-at-boot

ひとくせというのは、過去の経験者の事例[1]-[3]を参考にしても不十分であったということです。[4]のページを発見しその指摘事項を反映させて初めてうまくいきました。ラズベリーパイのLinux OSのRaspbian は数ヶ月に一度アップデートされるのですが、最近のもの(2016/1月時点)ではウォッチドッグタイマー関連がうまく動作しなくなってしまっていて、[4]はその対策を述べています。

新しいものがよいとは限らないこと、今後は、アップデートするときは自分で必要機能が正常に動作することを確認する必要があることを思い知らされました。ハードは安いが使いこなすコストは高いと。

ラズベリーパイはハード自体は安価(5~6千円)ですが、数日稼動させてハングするというような問題についてはだれも面倒をみていないのですね。まあそうだよなぁ、と思います。

 

■結論

ラズベリー+USBカメラー+3Gルーター の組み合わせの環境において、ラズベリーパイにウォッチドッグタイマーを仕込むことにより、ハング問題は解決(回避)できました。4ヶ月ハングなし(※)の稼動実績となり、現在も正常稼動中です。

ではまた。


[※追記] 遠隔からWebカメラ画像を見るという動作のなかで、応答がなかったことはない、という意味です。ラズベリーパイがハングしてもすかさず再起動がかかっていると考えられます。

 

 

 

 

 

 

 

 

よりそいプラン 太陽光発電ムラ市場メルマガ登録

太陽光発電ムラ市場セカンダリ無料査定



太陽光発電ムラ市場 パワコンの電気代を10分の1に!

コメントを残す





次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>