Script PHP PCNTL - guida necessità
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
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à.