2011-02-08 12 views
8

Creo que hay toneladas de publicaciones similares pero todavía no he encontrado una solución después de buscar.Shell_exec php con nohup

Básicamente, estoy tratando de ejecutar dos scripts en segundo plano. Cuando ellos se ejecutan en la línea de comandos, veo después de llamar a mi primer guión:

/usr/bin/nohup php script.php > nohupoutput.log & echo $! 

He intentado ...script.php > /dev/null & con el mismo resultado. Obtengo:

/usr/bin/nohup: ignoring input and redirecting stderr to stdout 

que ignoro y ejecuto el segundo. Noté que parecía estar colgando allí, y pulsando Enter me hizo volver a machine:~folder>

/usr/bin/nohup php script2.php > nohupoutput.log & echo $! 

Ambas secuencias de comandos funcionan. Traté de convertir esto a un comando shell_exec y nada parece funcionar. Sospecho que el bit ignoring input está causando dificultades, pero no estoy seguro. De todos modos, lo siguiente no funciona. Simplemente se cuelga en el navegador:

$output = shell_exec('/usr/bin/nohup php script.php > /dev/null &'); 
$output = shell_exec('/usr/bin/nohup php script2.php > /dev/null &'); 

Respuesta

9

Probar:

$output = shell_exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &'); 

O:

exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &'); 
+0

Estoy recibiendo una redirección de salida ambiguo cuando trato tanto en la línea de comandos. – Rio

+0

¿cuál es el sistema operativo y la versión de php? esta es una extraña. –

2

Este trabajo shoul:

shell_exec('nohup /usr/bin/php path/to/script.php > output.txt &'); 
2
this would help you dude.. 


<?php 

function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
     pclose(popen("start /B ". $cmd, "r")); 
    } 
    else { 
     exec($cmd . " > /dev/null &"); 
    } 
} 
//take note: to get your PHP_PATH, try looking at your phpinfo :) 
echo execInBackground("/usr/local/php53/bin/php 'example2.php'"); 

?> 

este es mi página de muestra de trabajo: () **** *****http://affiliateproductpromotions.net/pop.php()

+1

'popen ('nohup ... &', 'r')' es el único método que funciona para mí tanto en OS X como en Heroku. Una tonelada de otras soluciones para ejecutar procesos de fondo separados, incl. Symfony, Cocur y otros fallaron (ya sea que bloquearan la ejecución o morirían cuando el padre fallece). –

Cuestiones relacionadas