これまでの私の研究では、ラズベリーのウォッチドッグタイマーをアクティブにする方法として、systemdを使用する方法とウォッチドッグをインストールする方法の2つがあることに気づきました。それはすべてここでうまく説明されています:https://www.raspberrypi.org/forums/viewtopic.php?f = 29&t = 147501#
そして、私はそれを両方の方法で機能させることができましたが、再起動/シャットダウン中はできませんでした。私はそれをテストするためにフォークボムを使用しました、そしてそれはそれに反応します、しかし私が試みるとき:
sudo poweroff
それはダウンしたままです。だから私はそれが正しく起動しない場合、数秒後にそれをリセットするように再起動/シャットダウン中にウォッチドッグを強制的に実行し続ける方法があると思いますか?
ほとんどのアプローチでは、ブート中にウォッチドッグを開始しますが、常時実行する必要がある場合はどうでしょうか。私のラズベリーは再起動で一度停止し、それを機能させるために手動でプラグを抜く/プラグする必要がありました。
更新:
いくつかのものは今私にははるかに明確です。考慮すべき点が3つあります。
- ウォッチドッグタイマー
- ウォッチドッグデーモン
- ウォッチドッグサービスデーモン
ウォッチドッグタイマー:オーバーフローしたときにリセットをトリガーするレジスター。RPIの各サイクルが増加するため、リセットを回避するために定期的にクリア(キック)する必要があります。
ブート時に実行するには、以下を/boot/config.txtに追加します。
dtparam=watchdog=on
ウォッチドッグデーモン:ウォッチドッグタイマーを定期的にクリア(キック)するプロセス
インストールしてください:
sudo modprobe bcm2835_wdt
echo "bcm2835_wdt" | sudo tee -a /etc/modules
sudo apt-get install watchdog
sudo update-rc.d watchdog defaults
/etc/watchdog.confを構成します。
watchdog-device = /dev/watchdog
watchdog-timeout = 14
realtime = yes
priority = 1
max-load-1 = 24
/ etc / default / watchdogを構成します。
watchdog_module="bcm2835_wdt"
これを設定するには、以下を/etc/modprobe.d/watchdog.confに追加します。
options bcm2835_wdt nowayout=1 heartbeat=10
参照:http : //vk5tu.livejournal.com/35721.html
カーネルモジュールへのハートビートパラメータは、ハードウェアが再起動する前にデバイスによって認識されるハートビート間の最大ギャップです
nowayoutパラメーターは、/ dev / watchdogデバイスが閉じられたときに何が起こるかを決定します。ハートビートはまだ予期されているかどうかです。値1は、再起動までのカウントダウンが引き続き実行されることを示し、デバイスが再度開かれず、ハートビートが書き込まれた場合、マシンは再起動します。
有効にします(これが機能しない場合は、最初にwatchdog.serviceを処理して、再試行してください)。
sudo systemctl enable watchdog
監視する:
sudo systemctl status watchdog
ウォッチドッグサービスデーモン:ウォッチドッグデーモンが失敗/停止すると起動し、通常はウォッチドッグを定期的に起動するキープアライブデーモンを実行します
/lib/systemd/system/watchdog.serviceを構成します。
# OnFailure=wd_keepalive.service
-これをコメント化すると、キープアライブデーモンが無効になるため、ウォッチドッグデーモンが失敗または停止しても、ウォッチドッグタイマーがRPIを再起動するのを止めることはできません。
[Install]
WantedBy=multi-user.target
- バグ修正
最終的に:
RPIを再起動します。ラズベリーを再起動すると、すべてが開始されます(ウォッチドッグタイマーとウォッチドッグデーモン)。これを確認するには:
cat /var/log/syslog | grep watchdog
期待される出力:
Jun 14 12:09:08 raspberrypi systemd[1]: Starting watchdog daemon...
Jun 14 12:09:08 raspberrypi watchdog[813]: starting daemon (5.14):
Jun 14 12:09:08 raspberrypi watchdog[813]: int=1s realtime=yes sync=no soft=no mla=24 mem=0
Jun 14 12:09:08 raspberrypi watchdog[813]: ping: no machine to check
Jun 14 12:09:08 raspberrypi watchdog[813]: file: no file to check
Jun 14 12:09:08 raspberrypi watchdog[813]: pidfile: no server process to check
Jun 14 12:09:08 raspberrypi watchdog[813]: interface: no interface to check
Jun 14 12:09:08 raspberrypi watchdog[813]: temperature: no sensors to check
Jun 14 12:09:08 raspberrypi watchdog[813]: test=none(0) repair=none(0) alive=/dev/watchdog heartbeat=none to=root no_act=no force=no
Jun 14 12:09:08 raspberrypi watchdog[813]: watchdog now set to 14 seconds
Jun 14 12:09:08 raspberrypi watchdog[813]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer
Jun 14 12:09:08 raspberrypi systemd[1]: Started watchdog daemon.
そして:
ps aux|grep watchdog
期待される出力:
root 813 0.0 0.2 1888 1760 ? SLs 12:09 0:00 /usr/sbin/watchdog
pi 900 0.0 0.2 4752 1992 pts/0 S+ 12:10 0:00 grep --color=auto watchdog
テスト:
ウォッチドッグデーモンを終了し、次のコマンドを実行します。
ps aux|grep watchdog
プロセスIDを確認して強制終了します。
root 812 0.0 0.2 1888 1760 ? SLs 12:16 0:00 /usr/sbin/watchdog
pi 898 0.0 0.2 4752 1992 pts/0 S+ 12:16 0:00 grep --color=auto watchdog
sudo kill -9 812
古典的なforkbombテスト、実行:
: (){ :|:& };:
再起動プロセスが失敗した場合にラズベリーリセットをテストするには、次を実行します。
sudo poweroff
-これで問題が発生しました
ラズベリーは約15秒後に再起動します。
sudo poweroff
。うまくいくこともあれば、うまくいかないこともある:S