web-dev-qa-db-ja.com

プロセスが常に実行されていることを確認する

私はチェロキーを使ってしばらく前にサイトのホスティングを始めました。外部ソース(FastCGIなど)の場合、指定されたソケットまたはポートで実行されているものが見つからない場合、プロセスを起動するオプションがあります。 PHPまたはa Djangoサイトが(たまにそうするように)フォールオーバーすると)自動的に再起動することを意味するため、これは素晴らしいことです。

PHP-FPMを使用する新しいサーバーでは、チェロキー語(PHPにバグがある)を使用できなかったため、NGINXに移動しました。私はNGINX(構成スタイルの点で)が本当に好きですが、プロセスがフォールオーバーして再生成されないという深刻な問題があります。 PHPこれは時々これを行いますが、Djangoサイトはもっと問題の多いものです。私はそれらのために初期化スクリプトを作成しました、そしてそれらは起動時に現れますが、これは再起動の間に発生した場合、私を助けてください。

FastCGIプロキシを探していると思います。チェロキーのように、どのプロセスがどのソケット/ポートで実行されている必要があるかを認識し、それらをオンデマンドで再生成します。そのようなものは存在しますか?これをNGINXに組み込む方法はありますか?

24
Oli

daemontools はどうですか、具体的には監督ツール

superviseはサービスを監視します。サービスが開始され、サービスが停止した場合はサービスが再開されます。新しいサービスの設定は簡単です。監視の必要性はすべて、サービスを実行する実行スクリプトを含むディレクトリです。

14
Murilo

inittab でリスポーン

8

私はdaemontoolsの提案に2番目ですが、DJBのソフトウェアの動作が(なんらかの理由で)気に入らない場合は、 supervisord もあります。

しばらくの間、supervisordを使用してnginxおよび gunicorn を管理するFreeBSDイメージをセットアップしました。これは、いくつかの単純なWSGIアプリをホストするために使用しました。全体のプロセスは非常に簡単でした。

Djangoでこれを行う場合、GunicornはDjango apps、btw。)を展開することを非常に簡単にします。詳細については このブログ投稿 を参照してください。

5
Hank Gay

別のオプションは、私が一般的に使用している monit を使用することです。

4
lenin

god を検討しましたか?

神は、Rubyで記述された、構成、拡張が容易な監視フレームワークです。

サーバープロセスとタスクの実行を維持することは、展開プロセスの単純な部分である必要があります。神は、利用可能な最もシンプルで最も強力な監視アプリケーションになることを目指しています。

私はそれを使用して、Rails/nginxインスタンスがフォールオーバーした場合、それらが復活することを確認します。適切なポートを使用しているかどうかをチェックするための組み込みサポートは表示されませんが、問題はプロセスが失敗するか、はもう実行されていないので、godで問題が発生することはありません。

2
Chris Bunch

ハックな解決策は、プロセスがダウンしているかどうかを検出するスクリプト(cronを介して)を定期的に起動し、この場合は再起動することです。

0
Robert Swisher

Daemontoolsとsupervisordに加えて daemonize があります。

0
Brian Clapper

失敗したデーモンを再起動するにはさまざまな方法がありますが、通常の推奨事項は「inittabでの再起動」ですが、マシンが本当にねじ込まれている場合は制限を考慮します。

ウォッチドッグデーモンは、PIDファイルを介してプロセスを監視することもできます。ただし、これは、病気になりすぎて適切に実行できない(たとえば、メモリ不足、フォーク爆弾など)マシンを再起動するための二次的な防御手段としてのみ考慮すべきであり、デーモンを監視および再起動する主要な方法としてではありません。

最後に、nagiosを使用して複雑なシステムを監視し、管理者にグローバルビューを提供することを検討できます。プラグインを実行して、デーモンの動作を外部から調査することができます。これは、PIDが稼働しているという機能のより完全なテストです。

0
Paul Crawford