解決策 1:
Daemontools (http://cr.yp.to/daemontools.html) を調べてみます。
Supervise はまさにこの目的のために構築されました。つまり、プロセスを開始して監視し、プロセスが終了した場合はすぐに再起動します。
単純な「まだ実行中か」のチェックよりも複雑なことを行う必要がある場合は、引き続き monit を使用できます。また、プロセスを再起動する必要がある場合は、supervise を使用して実行してください。
解決策 2:
/etc/inittab を使用することもできます respawn を使用してデッド プロセスを再開するには アクション。
http://aplawrence.com/Unixart/startup.html の inittab セクションを参照してください
解決策 3:
サービスを再起動する場所がある場合は、Nagios でイベント ハンドラー スクリプトを使用できます。
varnish の起動に root 権限が必要な場合 (通常は init.d スクリプト)、「/etc/init.d/varnish start」を「sudo /etc/init.d/varnish start」に変更します。しかし、すべてのコマンドに対する完全な sudo nopasswd 特権として実行されるユーザー monit に付与したくない可能性があり、シェルスクリプトに sudo を付与することは基本的に同じように悪いため、これではおそらく十分ではありません。そのため、その init スクリプトのどのコマンドが sudo を必要とするかを把握し、/etc/sudoers ファイルでそれらのコマンドに sudo 権限を monit ユーザーに付与し、最後にその init スクリプトを適宜編集する必要があります。それとも、このすべてのワニスの代わりに、root 以外のユーザーとして実行できますか?
最後に、あなたはこれを知っていると確信していますが、とにかくそれを言うつもりです.あなたは明らかにこれに多くの努力を注いでいます.ワニスがクラッシュする理由を理解し、実際にそれを修正することに多くの努力を払っていることを願っています.
アップデート:
これはきれいではないかもしれませんが、root としてこれを行う簡単な方法は、プロセスが正常かどうかを確認し、そうでない場合は開始するスクリプトをセットアップすることです。次に、そのスクリプトを数分ごとに cron ジョブとして実行します。
解決策 4:
StackOverflow から取られたもう 1 つの優れたメソッド:
until myserver; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
これは crontab に追加できます:
crontab -e
次に、監視スクリプトを開始するルールを追加します。
@reboot /usr/local/bin/myservermonitor
または /etc/init.d
にスクリプトとして追加
これが良いアプローチである理由の詳細な説明については、StackOverflow の回答を参照してください。