PHP зависает в ожидании, пока exec вернет результаты команды wget+mysql
Вопрос
Связанный: глянь сюда
У меня есть эта команда:
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!");
Приведенная выше команда работает нормально, однако PHP ожидает завершения загрузки видео, прежде чем перейти к следующей загрузке.Однако следующая строка отправляет загрузку в фоновый режим, чего я и пытаюсь добиться с помощью предыдущей строки.
exec("wget -O http://domain/file.zip &>/dev/null & echo \$!");
Как мне изменить первую строку выше, чтобы отправить загрузку в фоновый режим?
Решение
Вы должны заставить вас использовать & отправить процесс в фоновый режим и перенаправить весь вывод.Поэтому вам нужно добавить
> /dev/null 2>&1 &
в конце вашей команды.Итак, у вас должно получиться что-то вроде этого:
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 &");
[Редактировать]
Чтобы упростить задачу, вы также можете переместить wget и обновление в другой файл php, который вы вызовете с помощью exec.Таким образом, у вас останется только
exec("php NewFile.php > /dev/null 2>&1 &");