Недостатки использования команды exec в скрипте php

В PHP

 I need to execute background tasks. So I have three choices to run script from 
 following commands:

 1)exec
 2)shell_exec
 3)passthru

 I randomly decided to use exec command in PHP.
 Because All of these have similar characteristics.

Теперь я хочу знать, есть ли disadvantage of exec() command который будет работать в фоновом режиме? На самом деле я не очень осведомлен об этой команде.

Это сделать отдельный поток от основного потока? Если yes thenЕсть ли способ очистить или приостановить этот фоновый поток? it simply forget it after firing the command?

Я спрашиваю это, потому что в моем коде есть необходимость run this script very fast one after one within moments, Так это создает какую-либо нагрузку на сервер?

РЕДАКТИРОВАТЬ: я использую команду exec, как это:

exec("/usr/bin/php /path/to/Notification.php >> /path/to/log_file.log 2>&1 &");

Пожалуйста, помогите мне в этом. Любая помощь будет оценена.

2 ответа

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

Теперь обычно любая команда, с которой вы работаете exec() НЕ будет работать в фоновом режиме, это означает, что ваш PHP-скрипт будет ждать завершения выполнения команды. Для того, чтобы ваши команды выполнялись в фоновом режиме, вы должны перенаправить поток вывода и явно указать ему запускать в фоновом режиме, добавив это к вашей команде:

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

Конечно, недостатком этого является то, что вы никогда не сможете получить какие-либо результаты от ваших команд обратно в PHP. Это будет огонь и забудь.

Поскольку вы перенаправляете как стандартный вывод, так и вывод ошибок в файл, я не думаю, что есть какие-либо проблемы, используете ли вы здесь exec, shell_exec или passthru.

насколько я знаю, это их основные отличия

shell_exec(): вернуть весь стандартный вывод (на терминале ничего не отображается)

exec (): то же самое, что и shel_exec(), но juset возвращает последнюю строку стандартного вывода

passthru(): это похоже на вызов команды, она будет показывать вывод на терминале, а не возвращать его.

Другие вопросы по тегам