PHP PCNTLスクリプト - ガイダンスが必要です
質問
私はスクレイピングプロジェクトに取り組んでいます。アプリケーションのどこかでこの機能が必要です
数秒の一時停止で何度も何度もスクリプトを実行します。
私は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秒の一時停止で何度も何度も起動する必要があります。
解決
x秒ごとにPHPスクリプトを繰り返すだけの場合は、FATコントローラーを使用して、すべてのデーモニスとスクリプトの実行を処理して、PHPスクリプトをビジネスロジシンに集中させることができます。 Cで書かれているので、PHPスクリプトで何をしても、非常に安定しています。
基本的に次の機能を提供します。
- デーモーミング、だからあなたはノフップを台無しにする必要はありません)
- マルチタスク、あなたの場合は関連性がないため、同時プロセスを1に設定するだけです
- 繰り返し実行されるので、フォーキングを台無しにする必要はありません。
PHPスクリプトのエラーと誤った長期実行スクリプトのエラーを処理する機能がたくさんあります。
インストールしてセットアップするのは非常に簡単で、ウェブサイトに多くのドキュメントがあり、開始します。少なくともそれがあなたに役立つかどうかを確認するのは、少なくともすぐに見る価値があります。
所属していません StackOverflow