5

キューシステムからコンピューティングジョブを実行するPHPスクリプトループを永久に持つことも参照してください。しかし、それは私のすべての質問に答えるものではありません。

PHPスクリプトを永久に実行したい場合は、キューにアクセスしてジョブを実行します。

  1. メモリの問題の可能性は何ですか?それらを回避する方法は?(フラッシュ機能または使用する必要があるものはありますか?)

  2. スクリプトが何らかの理由で停止した場合はどうなりますか?自動的に再起動するための良い方法は何でしょうか?

  3. スクリプトを開始するための最良の基本的なアプローチは何でしょうか。永久に実行されるので、cronは必要ありません。しかし、どうすれば起動できますか?(2も参照してください。)

4

3 に答える 3

9

キューをcronスクリプトとして設定します。10秒ごとに実行してもらいます。スクリプトが起動したら、ロックファイル(.lockなど)が存在するかどうかを確認します。ある場合は、すぐに終了します。そうでない場合は、.lockを作成して処理を開始します。エラーが発生した場合は、これらのエラーを電子メールで送信/ログに記録し、.lockを削除して終了します。タスクがない場合は、終了します。

PHPは、あなたが求めているように長期間スクリプトを実行できるように設計されていないため、このアプローチは理想的だと思います。潜在的なメモリリークやクラッシュなどを回避するには、スクリプトを継続的に実行することをお勧めします。

于 2010-09-21T13:12:30.610 に答える
1

PHP は MQ にアクセス (発行および消費) できますが、可能であれば、完全に機能する MQ アプリケーションを使用してこれを行うようにしてください。

完全に機能する MQ アプリケーション (Ruby、Perl、.NET、Java など) は、議論する同時実行性、エラー ログ、状態管理、およびスケーラビリティの問題をすべて処理します。

于 2011-01-17T18:43:45.470 に答える
0

ステート マシンを使いすぎるのではなく、少なくとも「ジョブ」(例: flv2avi 変換) と「タスク」(flv2avi 1.flv) の両方にステートを導入することをお勧めします。

私のスクリプト (Perl) では、ゾンビ プロセスがスクリプト全体のパフォーマンスを低下させ始めることがあります。まれなケースですが、ソースではネイティブであるため、スクリプトはキューの読み取りを停止できるはずであり、新しいインスタンスがタスクとジョブを続行できるようになります。ただし、実行中のタスクのデータをできるだけ保持することは歓迎されます。最初のインスタンスに 1 ~ 2 のタスクがあると、それは強制終了されます。

開始時 : 一般的なエラー (シャットダウンによる) をチェックします 既知のエラー (スペース不足、入力を読み取れない) をチェックします

パイプされたジョブ (vlc | ffmpeg、tail -f | grep) を実行する場合、fork() を実行するか (PHP には悪い考えですか?)、/bin を呼び出す代わりに、プログラムで I/O を使いすぎないようにすることができます。 /bash -c "p​​rog1 | prog2"、これにより CPU 負荷が大幅に節約されます。

開始点: /etc/rc.d と cron の両方 (プロセスをチェックし、最初のインスタンスを実行 || 'debug' 引数を指定して 2 番目に実行)

于 2010-09-21T13:16:48.310 に答える