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