Подтвердить что ты не робот

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

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

Любые предложения?

4b9b3361

Ответ 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.
Рекомендуется использовать полный путь, чтобы избежать ошибок в файле.

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

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

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

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

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