GNU/Linux >> Linux の 問題 >  >> Linux

クラッシュしたプロセスを再起動する簡単な方法は?

解決策 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 の回答を参照してください。


Linux
  1. `nsenter:`を使用して子プロセスを投獄する信頼できる方法?

  2. サービスがスクリプトで実行されているかどうかをテストする「適切な」方法は?

  3. シェルスクリプトを常にルートとして実行する方法は?

  1. インタラクティブシェルのセッションのプロセスとスクリプトのプロセス?

  2. HH:MM:SS (時:分:秒.分割秒) を秒に変換する簡単な方法

  3. Node.js スクリプトが systemctl で開始できませんでした

  1. [Linux]:簡単なシェルスクリプトを書き始めるときに学ぶ7つのこと

  2. スクリプトが一定期間に1回実行されるようにするための最良の方法は?

  3. Sigintが子プロセスに到達するのを防ぎますか?