再起動/シャットダウン中にウォッチドッグタイマーを実行し続ける方法


10

これまでの私の研究では、ラズベリーのウォッチドッグタイマーをアクティブにする方法として、systemdを使用する方法とウォッチドッグをインストールする方法の2つがあることに気づきました。それはすべてここでうまく説明されています:https//www.raspberrypi.org/forums/viewtopic.php?f = 29&t = 147501#

そして、私はそれを両方の方法で機能させることができましたが、再起動/シャットダウン中はできませんでした。私はそれをテストするためにフォークボムを使用しました、そしてそれはそれに反応します、しかし私が試みるとき:

sudo poweroff

それはダウンしたままです。だから私はそれが正しく起動しない場合、数秒後にそれをリセットするように再起動/シャットダウン中にウォッチドッグを強制的に実行し続ける方法があると思いますか?

ほとんどのアプローチでは、ブート中にウォッチドッグを開始しますが、常時実行する必要がある場合はどうでしょうか。私のラズベリーは再起動で一度停止し、それを機能させるために手動でプラグを抜く/プラグする必要がありました。


更新:

いくつかのものは今私にははるかに明確です。考慮すべき点が3つあります。

  1. ウォッチドッグタイマー
  2. ウォッチドッグデーモン
  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秒後に再起動します。

回答:


5

sudo poweroffシャットダウンしてオフのままにします。ウォッチドッグはこれを傍受しません。発生している動作は正しく、ウォッチドッグが電源がオフのシステムを再起動することを期待すべきではありません。

これはあなたがやりたいことだとは思いません。piを再起動する場合。sudo reboot代わりにコマンドを使用してください。そしてこの場合、シャットダウン中に何かがハングした場合-起動シーケンスがreboot起動すると、ウォッチドッグが引き継ぎます。


4

私はあなたがリンクしたすべての怒りを通り抜けましたが、著者はウォッチドッグを理解していないようです。

BCMハードウェアウォッチドッグがあります。ハードウェアウォッチドッグを開始する場合はdtparam=watchdog=on/boot/config.txt

それ自体はほとんど機能しませんが、定期的に「キック」されない場合はシステムを再起動する必要があります。あなたはそれを開始する/dev/watchdogために開くコードを書くことができます。

watchdog daemonウォッチドッグをアクティブにするように構成できるもあります。あなたが始めることができるはずですsudo systemctl enable watchdog

以下で言及するバグはJessieにあり、Stretchで修正されていることに注意してください
残念ながら、systemdスクリプトには既知のバグがあり、簡単に修正できます。http://unix.stackexchange.com/questions/346224/problem-with-systemd-starting-watchdogを参照してください


回答いただきありがとうございます。私の進捗状況を示すために、元の投稿に更新を追加しました。ただし、実行時にWDTがRPIを再起動するのにまだ問題がありますsudo poweroff。うまくいくこともあれば、うまくいかないこともある:S
Duje

1
残念ながら、あなたは多くの異なるアイデアを混ぜ合わせたようです。私はウォッチドッグの専門家であると主張するのではなく、それが実行されているかどうかを確認しsystemctl status watchdog.serviceます。キリングwatchdog WILL NOTをするので、再起動の原因watchdog.serviceを開始しwd_keepalive.service、その名のように意味の閉鎖、上の防止の再起動を。
ミリウェイズ2017年

wd_keepalive.serviceを無効にした場合は除きます。このように: "Configure /lib/systemd/system/watchdog.service:-コメントアウト # OnFailure=wd_keepalive.serviceするとキープアライブデーモンが無効になるため、ウォッチドッグデーモンが失敗/停止すると、ウォッチドッグタイマーがRPIを再起動するのを止めることはできません"
Duje

2

電源は、piのシステムサービス/デーモンであり、ICによって文字列解析され、Broadcom ICに直接ピン配置/ファンアウトされます。操作ワークフローはシステムファイルを参照することで変更できますが、割り込みとウォッチドッグタイマーの概念内でカスタム電力調整シナリオでペリフェラルを呼び出そうとしていることがわかります。この動作の一部を変更するには、レギュレーションICをピン留めし、ブート前のベアメタルプログラミングを実行します。これらをチェックして、あなたが何か心に留めているなら私に連絡することを躊躇しないでください。ARM Corp.アセンブリリファレンスラインの命令セットとアーキテクチャドキュメントを確認してください。それはウェブ上にあります。

http://infocenter.arm.com/help/topic/com.arm.doc.dui0489f/DUI0489F_arm_assembler_reference.pdf

https://www.arm.com/files/pdf/CortexM3_programming_for_ARM7_developers.pdf

ところで、教授に「こんにちは」と言ってください...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.