Я просматривал ответы о запуске php-скрипта в фоновом режиме, и они, похоже, распространяются двумя способами.
Некоторые люди предлагают использовать это (или что-то подобное):
/usr/bin/php command >/dev/null 2>&1 &
Другие предлагают использовать команду «at»:
echo '/usr/bin/php command'| at now
Каковы основные различия в этих двух методах? Каковы плюсы и минусы?
То, что я пытаюсь сделать, – это когда пользователь отправляет форму, мне нужно запустить несколько минутный скрипт, который, очевидно, должен выполняться в фоновом режиме. Я пробовал в обоих направлениях, и они оба работали на меня, но я не уверен, что выбрать.
Команда 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
чтобы процесс продолжал работать, когда вы закрываете оболочку.