Domanda

Sto lavorando su un progetto di raschiatura, da qualche parte nella domanda ho bisogno di questa funzionalità

eseguire di nuovo e di nuovo uno script con una pausa di alcuni secondi.

Ho cercato di usare PCNTL per compiere il lavoro. così ha scritto questo 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);  
  } 


}

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

io chiamo questo script da riga di comando come questo senso

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

Mi aspetto che process.php sarà lanciato più e più volte con intervalli di 10 secondi. Si stava facendo il lavoro quello che mi aspettavo, ma quando posso controllare i processi di matricola, c'erano migliaia processati in esecuzione, lanciati da questo script.

La mia esigenza è molto semplice:. Uno script deve essere lanciato di nuovo e di nuovo con 10 secondi di pausa

È stato utile?

Soluzione

Se si desidera solo per ripetere uno script PHP ogni x secondi, quindi è possibile utilizzare il regolatore grasso per gestire tutte le daemonising e l'esecuzione di script per voi in modo da poter concentrarsi sulla attività logicin script PHP. E 'scritto in C quindi è molto stabile, non importa quello che fai negli script PHP.

Si prevede essenzialmente le seguenti funzionalità:

  • daemonising, in modo da non dover pasticciare con nohup)
  • multitasking, nel tuo caso non rilevante quindi basta impostare processi concorrenti per 1
  • ripetuto in esecuzione, in modo da non dover pasticciare in giro con biforcano.

C'è un sacco di funzionalità per errori Manipolare script PHP e erronee script di lunga esecuzione.

E 'abbastanza facile da installare e avere istituito e c'è un sacco di documentazione sul sito per iniziare. Vale la pena un rapido sguardo, almeno per vedere se vi aiuterà.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top