trava PHP esperando por exec para resultados de retorno de wget + mysql comando
Pergunta
Relacionado: ver aqui
Eu tenho este comando:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!");
O comando acima funciona bem, no entanto PHP aguarda o vídeo para download terminar antes de ir para a próxima download. A linha a seguir, no entanto, envia a transferência para o fundo, que é o que eu estou tentando alcançar a partir da linha anterior.
exec("wget -O http://domain/file.zip &>/dev/null & echo \$!");
Como faço para ir sobre como alterar a primeira linha acima para enviar a transferência para o fundo?
Solução
Você tem que fazer você usa e para enviar o processo para o segundo plano e que você redirecionar toda a saída. Então, você precisa adicionar
> /dev/null 2>&1 &
no final do seu comando. Portanto, você deve acabar com algo parecido com isto:
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 &");
[Edit]
Para fazer coisa mais simples, você também pode mover o wget e a atualização para outro arquivo php que você chamaria com exec. Então você iria acabar com apenas
exec("php NewFile.php > /dev/null 2>&1 &");