Linuxでソフトウェアウォッチドッグを処理する方法を教えてもらえますか?
継続的に実行されるプログラムSampleApplication
があり、予期せずハングしたり閉じたりした場合は、プログラムを再起動する必要があります。
私はこれについてグーグルで調べていて、Linuxにはウォッチドッグ/dev/watchdog
があることがわかりましたが、その使用方法がわかりません。誰かが例を教えてくれませんか?
私の質問は、アプリケーション名と再起動の遅延間隔をどこで指定するかです。
Linuxでソフトウェアウォッチドッグを処理する方法を教えてもらえますか?
継続的に実行されるプログラムSampleApplication
があり、予期せずハングしたり閉じたりした場合は、プログラムを再起動する必要があります。
私はこれについてグーグルで調べていて、Linuxにはウォッチドッグ/dev/watchdog
があることがわかりましたが、その使用方法がわかりません。誰かが例を教えてくれませんか?
私の質問は、アプリケーション名と再起動の遅延間隔をどこで指定するかです。
Linux ソフトウェア ウォッチドッグは、プロセスを再起動するだけでなく、マシンを再起動します。
これは単に真実ではありません。ウォッチドッグがシステムのハングを通知した後、単一または複数のプロセスを再起動する可能性は非常に高いです。再起動を中止したり、ソフト再起動を実行したりできます。修復」 - あなたがやりたいことを何でもするスクリプト/バイナリ。ウォッチドッグのbusyboxバージョンは、ほぼ使用不可能なレベルまで削除されています.busybox開発者が主要な機能を放棄することに決めた理由を世界が知ることは決してないと思います-今のところ、busyboxをまったく避けるのが最善です- > 速度の改善はほとんどありません。サイズの縮小は、機能の大幅な損失を補うものではありません。/bin/bash はかなり小さいです - サイズが問題で、あなたが'
ああ、あなた自身のウォッチドッグを作成しないでください - それはあなたに未処理のエラーを残して、いつかあなたの人生を悪くするでしょう.
Unix/Linuxinit
プログラムのほとんどは、デーモンを管理して再起動します。にサービスを配置することを検討してください/etc/inittab
。Upstart
または、またはを使用している可能性がありますsystemd
。
これらのプログラムはすべてとして実行されPID 1
、システムプロセスを監視して再起動するのが彼らの仕事です。
Busybox タグから、組み込みシステムを実行していると思います。その上で、すべてのシェル スクリプトを使用した System V スタイルの init スクリプトは、非常にやり過ぎです。/etc/inittab
おそらくすべてを切り取って、 upstart または systemd ジョブのエントリに置き換える必要があります。
cron を使用するのはどうですか?毎分実行される小さな cron ジョブを設定します。アプリケーションが (ps を使用して) 起動しているかどうかを確認し、起動していない場合は再起動します。
次のような小さなスクリプトを作成します。
#!/bin/bash
if [ ! "$(pidof myapp)" ]
then
/path/to/myapp &
fi
「myapp」がプロセス リストにあるかどうかをテストします。「!」テストを反転します。そこにない場合は、「myapp」を実行します。「&」はバックグラウンドで開始するためのものです。
これをcronに追加します。システムと設定に応じて、いくつかの方法があります。古典的なものは、crontab を使用することです。crontab 行を指定する方法については多くのドキュメントがありますが、おそらく次のようなものが必要です。
* * * * * /path/to/the/script.sh > /dev/null
これにより、毎分、毎時間、毎分テストが実行されます。
特定の実行レベルで開始するために使用/etc/inittab
でき、強制終了された場合は自動的に再起動されます
n:2345:respawn:/path/to/app
これにより、実行レベル 2345 で再生成されます。おそらく必要なのは 3 と 5 だけですが、これは問題なく動作し、Linux に組み込まれています。
ウォッチドッグのドキュメントはこちらです:http://linux.die.net/man/8/watchdog
しかし、これはあなたが望むものではないようです。Linuxソフトウェアウォッチドッグは、プロセスを再起動するだけでなく、マシンを再起動します。
あなたは簡単にあなた自身の番犬を作ることができます。たとえば、プログラムに一時ファイルを定期的に書き込んでもらい、ファイルをときどきチェックして、しばらく更新されていない場合はプロセスを再開するスクリプトを起動することができます。
systemd を使用している場合、2 つのウォッチドッグがあります。1 つはハードウェア用 (systemd.conf またはウォッチドッグ デーモンを使用) で、もう 1 つはサービスとして初期化されたデーモン用です。systemd を使用する場合は、以下をご覧ください: http://0pointer.de/blog/projects/watchdog.html
誰かがオペレーティング システムのウォッチドッグを探してこのページにたどり着いた場合 (これは OP が直接望んでいたものではありません)、これが必要なものです。
sudo apt-get install watchdog
service watchdog status
service watchdog start
動作していることを確認するには、次を実行します。
tail -f /var/log/syslog | grep watchdog
次のように表示されます。
Jul 25 22:03:35 nuc watchdog[14229]: still alive after 733 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 734 interval(s)
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 735 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 736 interval(s)
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 737 interval(s)
質問に正しく答えていることを願っています。他のすべての答えは非常に異なっているようです。