Как сохранить постоянный PHP-скрипт? - PullRequest
11 голосов
/ 17 января 2011

У меня есть PHP-скрипт, который прослушивает входящие запросы сокетов и т. Д. Мне нужно, чтобы этот скрипт постоянно работал (он работает в бесконечном цикле) на сервере.

Как я могу инициировать и управлять этимпроцесс?Я попытался просто запустить его через SSH / putty, но как только тайм-аут соединения SSH, сценарий умирает.

Ответы [ 7 ]

7 голосов
/ 17 января 2011
myscript.php &

Это запустит скрипт в фоновом режиме

, вы можете проверить его с помощью

ps aux | grep myscript.php

Как Патрик упомянул в комментариях ниже, естьнет максимального времени выполнения скриптов PHP, запускаемых из командной строки.myscript.php будет работать бесконечно.

3 голосов
/ 06 апреля 2017

У нас недавно была похожая потребность. Мы работаем с сервером Ubuntu 14.04 LTS, поэтому создали процесс upstart, который запускает процесс при загрузке как и перезапускается, если он завершается по любой причине.

Это сработало очень хорошо для нас, включая автоматический перезапуск; наш длительный процесс в конечном итоге теряет соединение MySQL. Сценарий обрабатывает исключение и завершается до того, как процесс upstart автоматически перезапустит процесс. Мы также добавили сценарий cron для мониторинга процесса, на случай, если возникнет большая ошибка, из-за которой upstart прекращает попытки перезапуска; у нас есть отказоустойчивый на случай, если простой перезапуск не исправит предыдущую ошибку.

2 голосов
/ 17 января 2011

Вы можете использовать браузер, если используете ignore_user_abort () и set_time_limit ()

2 голосов
/ 17 января 2011

Запустите сценарий в фоновом режиме через SSH, как описано здесь: Получение ssh для выполнения команды в фоновом режиме на целевой машине

Я бы тогда предложил вам способ контролироватьскрипт все еще работаетВы упомянули, что ваш скрипт прослушивает порт, возможно, вы можете написать скрипт, который время от времени проверяет, открыт ли порт.

Другой вариант - отслеживать идентификатор процесса.Когда скрипт выполняется впервые, вы можете получить идентификатор процесса с помощью функции getmypid и сохранить его в файле.Затем вы можете периодически проверять, работает ли он по-прежнему, используя ps -p 1234.

Другое решение: Как проверить, работает ли скрипт php

0 голосов
/ 26 августа 2018

Если долгосрочная надежность является целью, тогда supervisord идеально подходит для этого!

Я наткнулся на это через https://lornajane.net/posts/2012/watch-over-long-running-processes-with-supervisord

Редактировать: Цель этого инструмента - решить указанную проблему. Заявленная цель - сохранить работающий длительный процесс. В комментарии указывалось (справедливо), что принятое в настоящее время решение не будет надежным, поскольку сценарий, скорее всего, выйдет из строя и т. Д. Таким образом, решение заключается в использовании инструмента для «запуска и управления этим процессом», который также поддерживает его. Этот инструмент делает именно это: он запускает процесс в фоновом режиме и поддерживает его работу.

0 голосов
/ 17 января 2011

Вы можете запустить его из командной строки.Вам нужно будет добавить модификатор run in the background, чтобы система не дожидалась завершения сценария.По сути, вы ставите & в конце своей командной строки.

Одна вещь, которую вы обязательно должны сделать, это создать скрипт оболочки ini, который запускает скрипт PHP при загрузке в случае любых перезапусков.

0 голосов
/ 17 января 2011

Почему бы не сделать цикл в то время как?do { /* your code */ } while $something == 0;

Затем, когда что-то происходит, чтобы вызвать останов сценария, задайте для $ нечто значение, отличное от 0.

...