2012-10-11 24 views
14

He buscado mucho para encontrar la respuesta exacta pero no encontré ninguna.proceso de fondo php usando la función exec

muchas personas mencionaron que deberíamos & al final del comando para no esperar la respuesta.
por ejemplo, para ejecutar bg.php en el fondo, esto se recomendó:

exec("/usr/bin/php bg.php &"); 

pero no funciona para mí. y el script principal espera la ejecución completa del bg.php.

También leo en algún lugar para escribir bg.php salida en un archivo de registro pero mi script de fondo no produce ningún resultado. Hace algún proceso y luego escribe algo en la base de datos.

Solo quiero que mi script ejecute bg.php y no espere a que termine.

por favor ayúdenme incluyendo el código correcto.

Respuesta

18

Usted tiene que desviar la producción de programas en alguna parte también, por lo general/dev/null

exec($cmd . " > /dev/null &"); 
+0

funciona bien! pero, ¿qué es el directorio/dev/null? ¿Este comando escribe la salida en un archivo? – Aliweb

+1

/dev/null simplemente descarta los datos que se le enviaron, también puede enrutarlo a algún archivo si necesita la salida del programa – ninaj

0

Ha considerado el uso de la pantalla? Puede iniciar una sesión de pantalla que se ejecuta en un proceso independiente.

screen -d -m -S my_bg_session /usr/bin/php bg.php 

Entonces se puede conectar a ella más tarde si todavía está en ejecución:

screen -r my_bg_session