MECHATRAXのブログ

弊社製品やサービスに関するブログです。企画や開発の際の参考になれば幸いです。
slee-Pi3のWatchdog timerでラズパイのプロセス監視【異常動作の検知】

slee-Pi3のWatchdog timerでラズパイのプロセス監視【異常動作の検知】

2021.04.08@kiyonaga

今回は slee-Pi 3 のウォッチドッグタイマを利用したプロセス監視機能を活用します。
slee-Pi 3 の動作確認が狙いなので、お手元の環境で実行する際は service ファイルのオプションを調整してください。
※作業環境と事前準備は こちら をご覧ください。

[関連ブログ]

slee-Pi 3 のウォッチドッグタイマを利用したプロセス監視
OOM 状態からの即時復帰
正常動作検知による監視
【異常動作検知による監視】← 本ブログ
異常動作検知-実装編

[目的と方法]

目的:停止したくないプログラムが停止した場合にクリーンな状態で再開させたい。
方法:プログラム内にハートビートを組込んでおき、ウォッチドッグタイマが異常検知した際に再起動させる。

[手順1]service ファイル作成

目的の再現性を高める+プロセスがkillされやすいように Nice=19 , OOMScoreAdjust=1000 に設定しています。
設定の詳細は以下をご覧ください。
Nice
OOMScoreAdjust

/etc/systemd/system/test-heartbeat.service
[Unit]
Description=sleepi3 test heartbeat
DefaultDependecies=no 
After=sysinit.target

[Service]
Type=simple
Nice=19
OOMScoreAdjust=1000
ExecStart=/opt/mtx/test-heartbeat.sh ← 実行ファイルのフルパス

[Install]
WantedBy=sysinit.target

[手順2]実行プログラム+ハートビートを作成

前回と同じプログラムを使用しています。
詳細は こちら をご覧ください。

[手順3]既存の sleepi3-heartbeat.service を停止し、自作ハートビートを起動する

sleepi3-heartbeat.service は sleePi3-utils に含まれている service です。

sudo systemctl disable sleepi3-heartbeat.service
sudo systemctl enable test-heartbeat.service
sudo systemctl restart test-heartbeat.service

test-heartbeat.service 部分には自作ハートビートのファイル名を入れてください。

[手順4] OOMKiller 用プログラム作成と実行

今回は こちら のブログを参考に作成しました。

[手順5]復帰確認

OOM 状態になるとハートビートが途絶える様子を確認できます。
途絶えてから60秒後に再起動を始め、正常に起動すれば異常状態からの復帰は成功です。
※slee-Pi 3 セットアップ時のウォッチドッグタイマ監視時間は60秒です。

また、下記コマンドを実行すると再起動要因がわかります。

sleepi3ctl get wakeup-flag
watchdog

[まとめ]

今回は slee-Pi 3 のウォッチドッグタイマによるプロセス監視機能を利用しました。
監視させているプロセスが OOMKiller に kill された際にハードウェアリセットをかける仕組みです。

< ブログ一覧へ戻る

関連記事はこちら