Tengo un comando que quiero ejecutar, pero no quiero que PHP se siente y espere el resultado.
¿Es posible que PHP no espere el resultado? Es decir, simplemente dé un puntapié y avance al siguiente comando.
No puedo encontrar nada, y no estoy seguro de que sea posible. Lo mejor que pude encontrar fue que alguien que realizara un trabajo de CRON comenzara en un minuto.
Siempre es bueno verificar la documentación :
Para ejecutar un comando, haga que no cuelgue su script php mientras se ejecuta, el progtwig que ejecuta no debe devolver a php. Para hacer esto, redirija tanto stdout como stderr a / dev / null, luego haga un fondo.
>
/dev/null 2>&1 &
Para ejecutar un comando y hacer que se genere como otro proceso que no depende del hilo de apache para seguir ejecutándose (no va a morir si alguien cancela la página) ejecuta esto:
exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');
Puede ejecutar el comando en segundo plano agregando un &
al final del mismo como:
exec('run_baby_run &');
Pero hacer esto solo colgará tu script porque:
Si un progtwig se inicia con la función exec, para que continúe ejecutándose en segundo plano, la salida del progtwig debe redirigirse a un archivo u otra secuencia de salida. Si no lo hace, PHP se bloqueará hasta que finalice la ejecución del progtwig.
De modo que puede redirigir la salida estándar del comando a un archivo, si desea verlo más tarde o a /dev/null
si desea descartarlo como sigue:
exec('run_baby_run > /dev/null &');
Ok, aquí está la última respuesta definitiva correcta ganadora del premio 😉
Esto usa wget para notificar una URL de algo sin esperar.
$command = 'wget -qO- http://test.com/data=data'; exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid);
Esto usa ls para actualizar un registro sin esperar.
$command = 'ls -la > content.log'; exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid);
“exec nohup setsid your_command”
el nohup permite que su_command continúe aunque el proceso que se inició pueda finalizar primero. Si lo hace, la señal de SIGNUP se enviará a your_command haciendo que finalice (a menos que capte esa señal y la ignore).