0

私はスクレイピングプロジェクトに取り組んでいます。アプリケーションのどこかでこの機能が必要です

数秒休止して、スクリプトを何度も実行します。

私は仕事を達成するためにpcntlを使用しようとしました。だからこのスクリプトを書いた

/************************/
$intra_sleep=10; // we're going to set the intra process launch sleep at 10 seconds
$task_process=null; // by default this is set to null -- do nothing
$loop_limit=0; // this is the number of times the loop shoul run -- if set to -1 look infinite number of times

if (isset($argv[1])) $task_process=$argv[1];
if (isset($argv[2])) $intra_sleep=$argv[2];
if (isset($argv[3])) $loop_limit=$argv[3];


for ($loop_count=0; $loop_limit==-1 ? true : $loop_count< $loop_limit; $loop_count++) 
{
  $pid= pcntl_fork();

   if ($pid == -1) 
   {
    die('MASTER: could not fork');
   } 
   else if ($pid==0) 
   {
     if ($task_process) 
     { 
       echo "Sleeping for  $intra_sleep Seconds\n"; 
       sleep($intra_sleep);
       echo "Launching Child \n\n"; 
       exec($task_process); // from here process script is being launched
     } 
     else 
     {
    echo "  CLONE: no task process defined -- doing nothing " . PHP_EOL;
     }
  } 
  else 
  {
     pcntl_waitpid($pid,$status);  
  } 


}

/*********************/

このようにCLIからこのスクリプトを呼び出しています

nohup php /this/script.php "php /path/to/process.php" 10 -1

process.phpが10秒間隔で何度も起動されることを期待しています。それは私が期待していた仕事をしていましたが、実行中のプロセスをチェックすると、このスクリプトによって起動された実行中の処理が数千ありました。

私の要件は非常に単純です。スクリプトは10秒の一時停止で何度も起動する必要があります。

4

1 に答える 1

1

x 秒ごとに PHP スクリプトを繰り返したい場合は、Fat Controller を使用して、スクリプトのすべてのデーモン化と実行を処理し、PHP スクリプトのビジネス ロジックに集中できます。C で記述されているため、PHP スクリプトで何を実行しても非常に安定しています。

基本的に次の機能を提供します。

  • デーモン化するので、nohup をいじる必要はありません)
  • マルチタスク、あなたの場合は関係ないので、同時プロセスを1に設定するだけです
  • 繰り返し実行されるため、フォークをいじる必要はありません。

PHP スクリプトのエラーや長時間実行されるエラーのあるスクリプトを処理するための機能が多数あります。

インストールとセットアップは非常に簡単で、ウェブサイトには開始するためのドキュメントがたくさんあります. 少なくとも役立つかどうかを確認するために、簡単に確認する価値があります。

http://fat-controller.sourceforge.net/

于 2011-10-18T08:29:49.410 に答える