PHP зависает в ожидании exec для возврата результатов из команды wget + mysql - PullRequest
2 голосов
/ 21 мая 2009

Похожие: см. Здесь

У меня есть эта команда:

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 \$!");

Как мне изменить первую строку выше для отправки загрузки в фоновом режиме?

1 Ответ

2 голосов
/ 21 мая 2009

Вы должны заставить & использовать процесс в фоновом режиме и перенаправить весь вывод. Так что вам нужно добавить

> /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 &"); 
...