Pregunta

Estoy trabajando en un proyecto de raspado, en algún lugar de la aplicación necesito esta funcionalidad

Ejecute un guión una y otra vez con una pausa de unos segundos.

Traté de usar PCNTL para lograr el trabajo. Entonces escribió este guión

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


}

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

Estoy llamando a este guión de CLI como de esta manera

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

Espero que ese proceso.php se lance una y otra vez con intervalos de 10 segundos. Estaba haciendo un trabajo lo que esperaba, pero cuando verifiqué los procesos de ejecución, se procesaron miles, lanzados por este script.

Mi requisito es muy simple: un script debe lanzarse una y otra vez con una pausa de 10 segundos.

¿Fue útil?

Solución

Si solo desea repetir un script PHP cada x segundos, entonces podría usar el controlador de grasa para manejar todo el demonio y la ejecución de los scripts para usted para que pueda concentrarse en la lógica de negocios de su script PHP. Está escrito en C, por lo que es muy estable, sin importar lo que haga en sus scripts PHP.

Básicamente proporciona la siguiente funcionalidad:

  • Dematrizing, para que no tengas que meterse con Nohup)
  • multitarea, en su caso no es relevante, por lo que simplemente establece procesos concurrentes en 1
  • Corriente repetida, para que no tenga que meterse con el bifurcación.

Hay mucha funcionalidad para manejar errores en scripts PHP y scripts erróneos de ejecución larga.

Es bastante fácil de instalar y configurarlo y hay mucha documentación en el sitio web para comenzar. Vale la pena un vistazo al menos para ver si lo ayudará.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top