我正在从事一个刮擦项目,在应用程序中的某个地方我需要此功能

一次又一次的停顿几秒钟。

我试图使用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 Controller为您处理脚本的所有守护程序和运行,以便您可以专注于业务逻辑您的PHP脚本。它是用C编写的,因此无论您在PHP脚本中做什么,都非常稳定。

它基本上提供了以下功能:

  • 守护者,所以您不必与Nohup混乱)
  • 多任务处理,就您而言而言无关,因此您只将并发过程设置为1
  • 重复运行,因此您不必弄乱分叉。

有很多功能可以处理PHP脚本中的错误和错误的长期运行脚本。

安装和设置非常容易,网站上有很多文档可以让您入门。至少值得一看,看看它是否会为您提供帮助。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top