プロセスが停止した場合にプロセスを再起動するには、upstart、runit、supervisor、daemontools などをどのように選択すればよいですか? (プロセス監視)

プロセスが停止した場合にプロセスを再起動するには、upstart、runit、supervisor、daemontools などをどのように選択すればよいですか? (プロセス監視)

私は Nginx Web プロキシ、gunicorn Web サーバー、および python/flask Web アプリを持っています。Gunicorn プロセスはどうやら停止したようです。今後は、再度クラッシュした場合に gunicorn プロセスを監視して再起動できるユーティリティを検討して、この状況を改善したいと考えています。

この作業を実行できるプロセス監視ユーティリティをいくつか見つけました。

  • デーモンツール
  • 起動
  • それを実行します
  • s6
  • 監督者
  • システムD
  • 成り上がり者
  • ...

プロセスの監視と再起動に使用されるさまざまなユーティリティを比較対照する包括的な記事はありますか?

https://en.wikipedia.org/wiki/プロセス監視

答え1

  • runitは の後継ですdaemontools(両方とも で書かれていますc

  • supervisordを使用しますpython

私は同じ著者のrunit作品を使っていますsocklogアルパインリナックス lxcコンテナを約 10 か月間使用して、web/databaseおよびその他のさまざまなサービスを管理しました。軽量で管理が簡単で、サービス障害も発生していません。ログ デーモンも独自のユーザーとして実行されるのでroot便利です。

ボイドLinuxrunitシステムとして使用しinit、またサービス監督run(スクリプトの例については、パッケージ ツリーでファイルを検索してくださいrunit)。

答え2

ディストリビューションが Upstart を使用している場合は、それを使用してください。これはジョブの再起動に対する非常に基本的なサポートを備えていますが、@EEAA が言及しているように、再起動ループを防ぐことができる制限が含まれています。

OSが別のinitプログラムを使用している場合は、変更しないでください。あなたが言及した他のツールについては、私は通常、Upstartがまだ存在するUbuntu(最新のLTS)を使用しているため、あまり役に立ちません。しかし、クローン1 分に 1 回 (またはループ内でより頻繁に)、PID が存在するかどうかを確認し、失敗した場合は再起動を発行します。

関連情報