PHP cuelga la espera de exec para devolver resultados de comandos mysql + wget
Pregunta
Relacionado: ver aquí
Tengo este comando:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!");
El comando anterior funciona bien, sin embargo PHP espera a que el video para terminar la descarga antes de pasar a la siguiente descarga. La siguiente línea, sin embargo, envía la descarga en el fondo, que es lo que estoy tratando de lograr de la línea anterior.
exec("wget -O http://domain/file.zip &>/dev/null & echo \$!");
¿Cómo hago para cambiar la primera línea arriba para enviar el archivo descargado en el fondo?
Solución
Hay que hacer que se utiliza y enviar el proceso a un segundo plano y que permite redirigir todas las salidas. Así que hay que añadir
> /dev/null 2>&1 &
al final de su comando. Por lo que debe terminar con algo como esto:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") echo \$! > /dev/null 2>&1 &");
[Editar]
Para hacer algo más sencillo, también puede mover el wget y la actualización a otro archivo PHP que ustedes llamarían con Exec. Por lo que podría terminar con un solo
exec("php NewFile.php > /dev/null 2>&1 &");