2010-12-13 11 views
0

私は現在、主にネットワークに接続される50 + PHPワーカースクリプトインスタンスを生成しています。彼らはセントラルジョブキューからデキューして作業を実行し、キューからさらに多くの作業を取得します。私は、これらが(1)実行されているジョブの間だけであることを期待しています。PHPプロセスを生成してシャットダウンする最も効率的な方法は何ですか?

起動時に、これらのプロセスを起動する必要があります。ループ内の明白なexec以外のPHPスクリプトを生成する最も良い方法は何ですか?また、正常にシャットダウンできるようにしたいと思います。

私は、シャットダウン通知を探しているためにいくつかのコードを置くが、きれいな方法は、PHP

であった場合PCNTL functionsに感謝

+0

php-fpmでnginxに切り替えて、fpmでそれをやりますか? :D – davidosomething

+0

CLIスクリプトにWebサーバーを使用する理由は何ですか? – ceejayoz

+0

ああ、それを逃したphp-cli – davidosomething

答えて

1

ルックは、特に(pcntl_forkように機能確認されませんでした)

ができ

私たちが現在使用している方法は、新しいプロセスが1つ1つループするたびに実行され、そのプロセスは終了し、終了します。メインループが処理情報などを処理している間に...

1

Gearmanを見て、あなたが話していることを正確に:仕事と労働者。

1

可能であれば、PHPスクリプトをフォークしないようにしてください。それは物事が乱雑になり、PHP名声のRasmus Lerdofも悪い考えだと思っています。 PHPは、長時間実行されるプロセスのために作られたものではありません。これは、フォークを行う親プロセスが何であるかということです。

より良い解決策(ただし、唯一ではありません)は、pythons supervisord(Pythonの知識は必要ありません)を使用してPHPワーカーを管理することです。デッドワーカーを再起動したり、あらかじめ設定された時間後にライブを再起動したり、メモリ制限を超えた場合は再起動します。

追加の勝利のために、ギアマンを使用して作業をスケジュールすることもできます。

+0

おそらく、おそらくserverfaultに最適な別の質問ですが、メモリ制限を超えた後にプロセスを再起動する方法を教えてください。私はスーパーバイザの文書でこれを見ることができません – BenLanc

+0

スーパーランスは、心に湧く最初のオプションです。http://pypi.python.org/pypi/superlance もう1つはhttp://mmonit.com/です。デーモンなどを監視できますあらゆる種類のもののために。うまくいけば、これはあなたを始めさせるのに十分です –

関連する問題