Я пытаюсь запустить 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/