我正在开发一个抓取项目,在应用程序的某个地方,我需要这个功能
一次又一次地运行一个脚本,暂停几秒钟。
我尝试使用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秒暂停时一次又一次地启动脚本。
答案 0 :(得分:1)
如果您只想每x秒重复一次PHP脚本,那么您可以使用The Fat Controller来处理所有脚本的守护和运行,这样您就可以专注于PHP脚本中的业务逻辑。它是用C语言编写的,所以它非常稳定,无论你在PHP脚本中做什么。
它基本上提供以下功能:
有很多功能可以处理PHP脚本中的错误和错误的长时间运行的脚本。
安装和设置非常简单,网站上有大量文档可以帮助您入门。值得快速查看一下,看看它是否会对你有所帮助。