Ejecutivo de shell asíncrono en PHP

Resuelto AdamTheHutt asked hace 54 años • 14 respuestas

Tengo un script PHP que necesita invocar un script de shell pero no le importa en absoluto el resultado. El script de shell realiza varias llamadas SOAP y tarda en completarse, por lo que no quiero ralentizar la solicitud PHP mientras espera una respuesta. De hecho, la solicitud PHP debería poder salir sin finalizar el proceso de shell.

He examinado las distintas funciones exec(), shell_exec(), pcntl_fork(), etc., pero ninguna parece ofrecer exactamente lo que quiero. (O, si lo hacen, no tengo claro cómo hacerlo). ¿Alguna sugerencia?

AdamTheHutt avatar Jan 01 '70 08:01 AdamTheHutt
Aceptado

Si "no le importa el resultado", ¿no se podría llamar al ejecutivo del script para &poner en segundo plano el proceso?

EDITAR : incorporando lo que @ AdamTheHut comentó en esta publicación, puede agregar esto a una llamada a exec:

" > /dev/null 2>/dev/null &"

Eso redirigirá tanto stdio(primero >) como stderr( 2>) /dev/nully se ejecutará en segundo plano.

Hay otras formas de hacer lo mismo, pero esta es la más sencilla de leer.


Una alternativa al doble redireccionamiento anterior:

" &> /dev/null &"
warren avatar Oct 21 '2008 16:10 warren

Utilicé para esto, ya que realmente está iniciando un proceso independiente.

<?php
    `echo "the command"|at now`;
?>
Czimi avatar Oct 21 '2008 22:10 Czimi

Para todos los usuarios de Windows: encontré una buena manera de ejecutar un script PHP asincrónico (en realidad funciona con casi todo).

Se basa en los comandos popen() y pclose(). Y funciona bien tanto en Windows como en Unix.

function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r")); 
    }
    else {
        exec($cmd . " > /dev/null &");  
    }
} 

Código original de: http://php.net/manual/en/function.exec.php#86329

LucaM avatar Oct 25 '2016 15:10 LucaM