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


23

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

PHP-FPMを使用する新しいサーバーでは、Cherokee(PHPにバグがある)を使用できなかったため、NGINXに移行しました。私は本当にNGINXが好きです(その構成スタイルのため)が、プロセスが転倒して再生成されないという深刻な問題があります。PHPはこれを行うことがありますが、Djangoサイトはさらに問題があります。私はそれらのために初期化スクリプトを作成し、それらはブート時に起動しますが、これは再起動の間にそれらが結びつく場合私には役立ちません。

FastCGIプロキシを探していると思います。Cherokeeのように、どのプロセスがどのソケット/ポートで実行されるべきかを知っており、それらをオンデマンドで再生成します。そのようなものは存在しますか?これをNGINXに組み込む方法はありますか(構成を簡単にするため)?

回答:


13

daemontools、特に監視ツールはどうですか

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


daemontoolsの場合は+1。ただし、そのようなスクリプトを単に投げることはできません/etc/init.d/apachectl。多くの場合、使用するために独自の単純な起動スクリプトを書き直す必要がありますexec。私はdaemontoolsのを使用して、いくつかのより多くの例を見てみたいが
ステファンLasiewski

daemontoolsには、runitとしての別のインカネーションがあります。daemontoolsはパブリックドメインであるため、それほど重要ではありませんが、古いディストリビューションにはrunitしかありません。
カム


5

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

私が使用し、そのバックしながら、FreeBSDの画像aを設定しsupervisord、管理するnginxgunicorn、私はいくつかの簡単なWSGIアプリケーションをホストするために使用され、全体のプロセスは非常に簡単でした。

Djangoでこれを行っている場合、GunicornはDjangoアプリをデプロイすることを本当に簡単にします。詳細については、このブログ投稿を参照してください。


4

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


3

考えましたgodか?

神は、Rubyで書かれた監視フレームワークの設定と拡張が簡単です。

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

Rails / nginxインスタンスが転倒した場合にそれらが復活することを確認するために使用しますが実行されなくなったので、間違えることはありませんgod



0

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


0

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

watchdogデーモンは、PIDファイルを介してプロセスを監視することもできます。ただし、これは、正常に実行できない(メモリ不足、フォーク爆弾など)マシンをリブートするための二次的な防御ラインとしてのみ考慮されるべきであり、デーモンの主要な方法または監視および再起動としてではありません。

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


-1

簡単な答え-開始し、どこかにpidを書き込み、x時間(秒、分、ベット)ごとにプロセスが稼働しているかどうかを確認します。

長い答え-上記はすべて良い方法です。しかし、やや複雑です。

また、生きていることとリクエストに答えることは異なることを覚えておいてください。


1
…そして、あなたの指を交差させて、PIDファイルを落書きしたり、消去したり、別のデーモンに再利用したり、チェックに反応しない他の無害で無関係なプロセスに再指定したりしないことを願う起きているため。☺これが、デーモンを子プロセスとして実行し、通常のUnix / Linuxシステムメカニズムで監視する適切なデーモンスーパーバイザーの長い答えが、長く受け入れられているより良い方法である理由です。
-JdeBP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.