2

run-parts によって 10 分ごとに実行される crontab スクリプトがあります。

sudo -u www php -f /path/to/parser.php crawl_content1 >> /tmp/job_1.log 2>&1 &
sudo -u www php -f /path/to/parser.php crawl_content2 >> /tmp/job_2.log 2>&1 &

コードに続く私のparser.phpコンティアン

$max_execute_time = time() + 9*60;
while(true)
{
   //... do something ...
   if(time() >= $max_execute_time)
   {
       echo "time out!";
       exit;
   }
}

私の質問は出口部分です。終了後、スクリプトは引き続き CPU の 10% とメモリの 25% (512MB) で実行されます。exit を break に変更した後、問題は解決しました。

これについて何が問題なのか知っている人はいますか?ありがとう

4

1 に答える 1

0

これは微妙な反応ですが、PHP には少なくとも 3 つの方法があるのに、独自の最大実行タイマーを実装したのは奇妙だと思います(スクリプトで自分で計算する手間と CPU サイクルを節約できます)。

sudo -u www php -d max_execution_time=30s -f /path/to/parser.php crawl_content1 >> /tmp/job_1.log 2>&1 &

または、スクリプトの先頭で:

ini_set('max_execution_time', 30);

または(同等):

set_time_limit(30);

( を変更することもできphp.iniますが、当然のことながら、変更したくないでしょう。)

実装によってスクリプト全体が終了するため、これをお勧めします。スクリプトを終了せずにループの実行時間を正当に制限する場合もあります。

于 2012-10-12T15:20:24.610 に答える