2011-09-03 17 views
6

Ho uno script PHP che interroga un database per un elenco dei lavori da fare e spara altri script PHP sulla base di ciò che trova nel database (in pratica una coda di processo).PHP shell_exec attendere lo script per finire?

Alcuni degli script che lo script della coda corridore esegue potrebbe richiedere 30 secondi o giù di lì per completare l'esecuzione (la generazione di file PDF, il ridimensionamento delle immagini, ecc).

Il problema è che lo script shell_exec() nello script di coda chiama gli script di elaborazione, ma non attende che finiscano, con il risultato che la coda non viene completata.

Coda di script runner:

#!/usr/bin/php 
<?php 
    // Loop through database and find jobs to be done 
    shell_exec(sprintf("/root/scripts/%s.php", $row['jobName'])); 
?> 

script di processo:

#!/usr/bin/php 
<?php 
    shell_exec("/usr/bin/htmldoc -t pdf --webpage test.html > test.pdf"); 
    // Update database to mark job as completed 
?> 

Esecuzione dello script di processo direttamente dalla riga di comando funziona e viene creato il PDF.

Tutte le idee su come risolvere questo problema? O un modo migliore per eseguire una coda di processo?

+1

Si prega di mostrare un po 'di codice –

risposta

7

Prova questo:

shell_exec("nohup /usr/bin/htmldoc -t pdf --webpage test.html > test.pdf 2>&1 &"); 
Problemi correlati