2013-09-06 3 views
0

В PHP,Недостатки использования EXEC команды в 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, который будет работать в фоновом режиме? На самом деле я мало знаю об этой команде.

Is It отдельная нить из основной темы? Если yes then, есть ли способ до удалить или закрыть эту фоновую тему? Или it simply forget it after firing the command?

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

EDIT: Я использую EXEC команду:

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

Пожалуйста направьте меня на this.Any помощь будет оценена.

ответ

2

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

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

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

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

+0

Ok.Я использую как это только. Пожалуйста, см. Мой отредактированный вопрос. Единственное различие заключается в том, что я использую /path/to/log_file.log 2> & 1 & вместо/dev/null 2>/dev/null &. Требуется ли время? Если я печатаю журнал в log_file? Благодарю. – Ponting

+0

Почему вы запускаете PHP-скрипт из PHP с помощью exec()? Почему бы вам просто не включить файл? В любом случае, перенаправление вывода в файл также поможет. – ciruvan

+0

Потому что я отправляю уведомление APNS push путем включения другого файла в Notification.php – Ponting

1

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

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

shell_exec(): возвращает весь стандарт вне положить (он не будет ничего на терминале шоу)

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

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

Смежные вопросы