1

AWSランプサーバーでphpスクリプトを並行して実行しています。現在、各スクリプトを 10 分間隔で実行するように cron ジョブを設定しており、スクリプトは 20 分間実行した後に終了するように設定されています。サーバーのメモリが不足しないように、各スクリプトの実行時間を制限しています。できる限りメモリ ホールを塞ごうとしましたが、これに取り組んでいるときは、スクリプトをタイムアウトにすることが暫定的な解決策として適切です。

問題は、同時に実行するスクリプトが多すぎることです。設定した間隔でスクリプトを実行するために cron を使用するのではなく、どうすればサーバーにスクリプトを実行させることができますか?

A) 特定の瞬間に実行されている特定の php スクリプトのインスタンス数を監視する

B) その数が n (たとえば 4 つのインスタンス) を下回った場合、サーバーは php スクリプトの別のインスタンスを起動しますか?

Linuxの使い方をまだ学んでくれてありがとう!

4

1 に答える 1

3

最善の方法は、実行し、子プロセスをフォークし、監視し、必要に応じて再起動する独自のデーモンを作成することです。

http://php.net/manual/en/book.pcntl.phpをご覧ください。

ただし、あなたの場合、もっと簡単な答えがあるかもしれません...次のように、ローダースクリプトを呼び出す1分間のcrontabを配置します。

* * * * *  /usr/bin/php /path/to/loader.php

ローダー スクリプトは、単純なシェル スクリプト (または php スクリプト) にすることができます。このコマンドをシェルで実行します。実行中のスクリプトのインスタンス数が返されます。

ps aux | grep "/usr/bin/php /path/to/thing/you/run.php" | grep -v grep | wc -l

# インスタンス > 3 の場合は、開始しないでください。それ以外の場合は、いずれかを開始します。PHP の場合は、必要なファイルを単純に含めることができます。bashの場合は、書くだけです/usr/bin/php /path/to/thing/you/run.php

それがいくらか役立つことを願っています!

于 2012-05-14T17:03:54.493 に答える