Intereting Posts
Примечание. Неопределенная переменная: captcha в C: \ wamp \ projects \ ServiceAdmin \ login \ loginauth.php в строке 11 Разница между var_dump, var_export и print_r Могу ли я визуализировать представление, не возвращая его в контроллере действий в zend framework 2? Как запустить laravel 5 на порт 80 localhost? Via Помните, что всегда возвращаю false PHP CGI заменяет имя вызываемого файла в вызовах командной строки exec, вызывая бесконечный цикл Установите тайм-аут для конкретной функции / блока кода (не весь скрипт)? Будет ли глобальное ключевое слово устаревать / удаляться в будущих версиях PHP? Сравнение String с Integer дает странные результаты Как исправить ассоциативные ключи массива, которые не имеют одинарных кавычек в нескольких файлах Ограничение символов до определенной ширины Как установить PHPUnit с WAMP? Вопросы / предложения шаблонов классов базы данных PHP Пустые переменные перед публикацией с помощью jQuery ТОЛЬКО цикл запроса mysql

Запуск PHP-скрипта из командной строки в качестве фонового процесса

Я пытаюсь запустить PHP-скрипт постоянно в фоновом режиме с помощью командной строки в Linux. Я пробовал команду php filename.php & но похоже, что выполнение скрипта заканчивается очень быстро, в то время как оно должно продолжаться до тех пор, пока процесс не будет прерван.

Какие-либо предложения?

Вы уверены, что скрипт не содержит ошибок? Это то, что обычно делает « выполнение завершается очень быстро ». Сначала добавьте error_reporting(E_ALL); ini_set('display_errors', 1); error_reporting(E_ALL); ini_set('display_errors', 1); в верхней части вашего скрипта, чтобы отображать любые ошибки, которые он может иметь, вы можете использовать:

nohup php filename.php &

nohup запускает команду, даже если сеанс отключен или пользователь выходит из системы.

ИЛИ

nohup php filename.php >/dev/null 2>&1 &

То же, что и выше, но не создает файл nohup.out .


Вы также можете использовать:
ignore_user_abort(1);

Установите, отключает ли клиент прерывание выполнения сценария

set_time_limit(0);

Ограничивает максимальное время выполнения сценария, в этом случае оно будет работать до тех пор, пока процесс не завершится или процесс apache не перезагрузится.


Заметки

Пути php и filename.php могут предоставляться как полный путь , вместо php и filename.php вы можете использовать /usr/bin/php и /full/path/to/filename.php .
Полный путь рекомендуется избегать ошибок, не найденных в файле .

этот процесс может быть закрыт, когда ваш сеанс закрыт.

попробуйте использовать nohup php filename.php

 nohup /path/to/command-name arg1 arg2 & 

Где:
command-name : имя сценария оболочки или имя команды. Вы можете передать аргумент команде или сценарию оболочки.
& : nohup автоматически не запускает команду, выполняемую в фоновом режиме; вы должны сделать это явно, закончив командную строку символом &.

 nohup php file.php > /dev/null 2>&1 & 

Большие-thans ( > ) в командах, подобных этим, перенаправляют выход программы где-то. В этом случае что-то перенаправляется на /dev/null , и что-то перенаправляется на &1

Стандартный вход, выход и ошибка

Существует три стандартных источника ввода и вывода для программы. Стандартный ввод обычно поступает с клавиатуры, если это интерактивная программа или из другой программы, если она обрабатывает вывод другой программы. Обычно программа печатает на стандартный вывод и иногда печатает стандартную ошибку. Эти три дескриптора файлов (вы можете думать о них как «каналы данных») часто называются STDIN, STDOUT, and STDERR .

Иногда их не называют, они пронумерованы! Встроенные нумерации для них равны 0, 1, and 2 в этом порядке. По умолчанию, если вы не указали имя или номер один явно, вы говорите о STDOUT .

команда выше перенаправляет стандартный вывод на /dev/null , что является местом, где вы можете сбросить все, что вам не нужно, а затем перенаправлять стандартную ошибку в стандартный вывод (вам нужно поставить & перед пунктом назначения, когда вы это сделаете это).

Поэтому короткое объяснение заключается в том, что «все данные этой команды должны быть заброшены в черную дыру». Это один из хороших способов сделать программу очень тихой!

& в конце ставит команду в фоновом режиме.

ref: https://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/