Question

Je travaille sur un projet de grattage, quelque part dans l'application que je besoin de cette fonctionnalité

exécuter à nouveau un script et encore avec une pause de quelques secondes.

J'ai essayé d'utiliser pcntl pour accomplir le travail. donc écrit ce script

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


}

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

J'appelle ce script de CLI comme cette façon

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

Je pense que process.php sera lancé à nouveau et à nouveau avec des intervalles de 10 secondes. Le travail était en train de faire ce que je m'y attendais, mais quand je vérifie les processus runing, il y avait des milliers transformés en cours d'exécution, lancés par ce script.

Mon exigence est très simple:. Un script doit être lancé à nouveau et à nouveau avec pause de 10 secondes

Était-ce utile?

La solution

Si vous voulez juste répéter un script PHP toutes les x secondes, vous pouvez utiliser le contrôleur Fat pour gérer tous les daemonising et l'exécution de scripts pour vous afin que vous puissiez vous concentrer sur votre entreprise logicin script PHP. Il est écrit en C il est donc très stable, peu importe ce que vous faites dans vos scripts PHP.

Il fournit essentiellement les fonctionnalités suivantes:

  • daemonising, de sorte que vous n'avez pas à déconner avec nohup)
  • multi-tâches, dans votre cas pas pertinent si vous venez de définir les processus simultanés à 1
  • en cours d'exécution répétée, de sorte que vous n'avez pas à déconner avec bifurquer.

Il y a beaucoup de fonctionnalités à des erreurs de poignée dans les scripts PHP et des scripts erronés à long en cours d'exécution.

Il est assez facile à installer et à se mettre en place et il y a beaucoup de documentation sur le site pour vous aider à démarrer. Il vaut la peine un coup d'œil au moins pour voir si elle vous aidera.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top