2011-09-03 190 views
6

Tengo un script PHP que consulta una base de datos para obtener una lista de trabajos y desactiva otros scripts PHP en función de lo que encuentre en la base de datos (básicamente una cola de procesos).PHP shell_exec ¿esperar a que termine la secuencia de comandos?

Algunas de las secuencias de comandos que ejecuta la secuencia de comandos del corredor de cola pueden tardar unos 30 segundos en finalizar la ejecución (generar archivos PDF, cambiar el tamaño de las imágenes, etc.).

El problema es que shell_exec() en el script del corredor de cola llama a los scripts de procesamiento, pero luego no espera a que finalicen, lo que hace que la cola no se complete.

cola guión corredor:

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

guión de empleo:

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

Ejecutar el script de trabajo directamente desde la línea de comandos funciona y se crea el archivo PDF.

¿Alguna idea sobre cómo solucionar esto? ¿O una mejor forma de ejecutar una cola de proceso?

+1

Por favor, muestran algo de código –

Respuesta

7

Prueba esto:

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