Должен ли я использовать «| на данный момент "или амперсанд (&) для запуска сценария в фоновом режиме?

Я просматривал ответы о запуске php-скрипта в фоновом режиме, и они, похоже, распространяются двумя способами.

Некоторые люди предлагают использовать это (или что-то подобное):

/usr/bin/php command >/dev/null 2>&1 & 

Другие предлагают использовать команду «at»:

 echo '/usr/bin/php command'| at now 

Каковы основные различия в этих двух методах? Каковы плюсы и минусы?

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

Solutions Collecting From Web of "Должен ли я использовать «| на данный момент "или амперсанд (&) для запуска сценария в фоновом режиме?"

Команда at является планировщиком, который принимает строки из stdin или файлов, которые содержат команды для запуска в определенное время. Ваш пример:

 echo '/usr/bin/php command'| at now 

Предоставляет команду «at» команду в качестве строки и планирует ее запуск сразу же.

Первый метод – это типичный способ фонового процесса через оболочку:

 /usr/bin/php command >/dev/null 2>&1 & 

Часть «> / dev / null» указывает оболочке на отправку файла stdout вашей команды в / dev / null, а часть «2> & 1» говорит, чтобы отправить вывод stderr вашей команды в stdout (который затем переходит в / dev / null). Вместе они подавляют выход. Вы можете сделать это за один шаг:

 /usr/bin/php command &>/dev/null & # bash 

«&» В конце этого – то, что говорит оболочке, чтобы выполнить фоновый процесс.

Преимуществом использования «at» является гибкость планирования вашей команды для запуска в другое время, чем сейчас (между прочим). Прочтите справочную страницу. Недостатком является то, что он не может быть установлен на всех системах.

Плюсы использования & с помощью оболочек заключаются в том, что на основе фона нет накладных расходов. При использовании команды «at» для немедленного запуска команды происходит избыточное переполнение, поскольку она включает в себя создание нового процесса, планирование команды, осознание того, что оно настроено для запуска, и затем запустить его в фоновом режиме. В то время как запуск команды с символом «&» в оболочке будет просто запускать эту команду в фоновом режиме.

Когда вы вызываете его с помощью команды at программа выполняется в фоновом режиме с помощью демона.

Когда вы используете & процесс все еще привязан к текущей оболочке. Когда вы закрываете оболочку, процесс завершается. Вы также можете выполнить nohoup /usr/bin/php command чтобы процесс продолжал работать, когда вы закрываете оболочку.