2011-10-18 15 views
0

私はどこかに、私はこの機能PHPのPCNTLスクリプト - 必要ガイダンス

は、いくつかの秒の一時停止を何度も何度もスクリプトを実行する必要があるアプリケーションでは、スクレイピングプロジェクトに取り組んでいます。

私は仕事を達成するためにpcntlを使用しようとしました。したがって、このスクリプトは、私がこのよう

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

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

/************************/ 
$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); 
    } 


} 

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

書いた私はprocess.phpは10秒間隔で何度も何度も発売されることを期待しています。私が期待していた作業をしていましたが、ランニングプロセスをチェックすると、このスクリプトで実行された数千の処理が処理されました。

私の要件は非常に簡単です。スクリプトを10秒間何度も何度も起動する必要があります。

答えて

1

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

それは基本的に以下の機能が用意されています。あなたはnohupを約混乱する必要はありませんので、あなただけの1に並行プロセスを設定して、関連するお使いの場合には、マルチタスク

  • )、

    • daemonisingはありません
    • が繰り返し実行されているので、フォークを混乱させる必要はありません。

    PHPスクリプトや誤った実行時間の長いスクリプトでエラーを処理する機能はたくさんあります。

    これはインストールが簡単でセットアップが簡単で、ウェブサイトには多くのドキュメントが用意されています。それが少なくともあなたを助けるかどうかを見るためには、ちょっと見ておく価値があります。

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

  • 関連する問題