Существует ли способ использовать shell_exec, не ожидая команды для завершения?

Это работает для меня в CentOS:

echo -e ""hello\nworld""
90
задан Jason Plank 13 October 2011 в 12:43
поделиться

7 ответов

Как насчет добавления.

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

shell_exec('php measurePerformance.php 47 844 email@yahoo.com > /dev/null 2>/dev/null &');

Обратите внимание, что это также избавляет от stdio и stderr.

144
ответ дан 24 November 2019 в 07:01
поделиться

This will execute a command and disconnect from the running process. Of course, it can be any command you want. But for a test, you can create a php file with a sleep(20) command it.

exec("nohup /usr/bin/php -f sleep.php > /dev/null 2>&1 &");
27
ответ дан 24 November 2019 в 07:01
поделиться

Если он находится за пределами веб-страницы, я рекомендую сгенерировать какой-либо сигнал (возможно, сбросить файл в каталог) и попросить задание cron подобрать работу, которую необходимо выполнить . В противном случае мы, скорее всего, попадем на территорию использования pcntl_fork () и exec () внутри процесса Apache, и это просто плохой mojo.

1
ответ дан 24 November 2019 в 07:01
поделиться

Это будет работать, но вы должны быть осторожны, чтобы не перегружать ваш сервер, потому что он будет создавать новый процесс каждый раз, когда вы вызываете эту функцию, которая будет работать в фоновом режиме. Если одновременно выполняется только один вызов, этот обходной путь выполнит свою работу.

Если нет, то я бы посоветовал запустить очередь сообщений, например, beanstalkd / gearman / amazon sqs.

1
ответ дан 24 November 2019 в 07:01
поделиться

Вы всегда можете отправить сообщение через AJAX на страницу, которая вызывает shell_exec ().

-3
ответ дан 24 November 2019 в 07:01
поделиться

Используйте команду PHP popen , например:

pclose(popen("start c:\wamp\bin\php.exe c:\wamp\www\script.php","r"));

Это создаст дочерний процесс, и сценарий будет запускаться в фоновом режиме, не дожидаясь вывода.

6
ответ дан 24 November 2019 в 07:01
поделиться

В Windows 2003, чтобы вызвать другой сценарий без ожидания, я использовал следующее:

$commandString = "start /b c:\\php\\php.EXE C:\\Inetpub\\wwwroot\\mysite.com\\phpforktest.php --passmsg=$testmsg"; 
pclose(popen($commandString, 'r'));

Это работает только ПОСЛЕ изменения разрешений на cmd.exe - добавить Чтение и выполнение для IUSR_YOURMACHINE (я также установил для записи значение «Запретить»).

8
ответ дан 24 November 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: