web-dev-qa-db-ja.com

プロセスの終了後にプロセスを自動的に再起動するにはどうすればよいですか?

Debian Squeezeボックスで終了した後に再起動したいgolangプログラムを持っています。事は、Apache 2 mod_proxy設定の背後でHTTPを提供することです。プロセスが失敗することはないと思いますが、それに対する保険をかけたいです。

Ubuntuでは、プロセスを存続させるためにupstartを使用しました。 Debianは、私が理解しているUpstartがinitの置き換えであることを好みません。

Squeezeで動作し、initでNiceを再生するプロセスが終了した後に1つ以上のプロセスを再起動する代替手段はありますか?

11
Deleted

そのための最善の方法はdaemontoolsです。プロセスを監視および再起動できます。

彼らのウェブサイトのドキュメントを参照してください: http://cr.yp.to/daemontools.html

10
mailq

supervise は、軽量で効率的な代替手段です。 debianでは、それは daemontools にパッケージ化されています。この 関連する質問 を読むこともできます。これは、監督の批判をいくつかリストし、別の可能性として restartd について言及しています。

最後に、非常に簡単な設定が必要な場合は、 monit で大成功しました。 Debianにパッケージされている でもあります。

10
Francois G

プロセスの再起動を処理するクロスディストリビューションの方法は、cronと簡単なスクリプトを使用することです。あなたはここに書き込みを見ることができます Linuxでジョブを実行し続ける方法

スクリプトは次のようになります

#!/bin/bash 
# make-run.sh 
# make sure a process is always running.  
# Add the following to the crontab (i.e. crontab -e)
# */5 * * * * /home/path_to_make_run/make-run.sh

process=servermonitoringhq 
makerun="/home/path_to_the_job_you_want_running/runjob.sh"  

if pgrep $process > /dev/null         
then                 
  exit         
else         
  $makerun &         
fi 
2
Ian Purton

監視または監視は、単一のプロセスを維持するのに適しています。 「1つ以上の」プロセスを存続させることを求めているので、 supervisord をプラグインしたいと思います。単一のプロセスを管理することは確かに過剰ですが、複数のプロセスを追跡する必要がある場合は、それが問題になることがあります。

2
Bittrance

1つのオプションは、スクリプトを/etc/inittabに置く代わりに/etc/init.d/を使用することです。

次の形式でエントリを追加するだけです。

<jobname>:<runlevels>:respawn:<command>

残念ながら、これは通常のstart/stop/restart initコマンドを使用できないことを意味しますが、スクリプトが常に実行されていることを確認する必要があります。

2
Alex