Как сохранить постоянный скрипт PHP?

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

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

Solutions Collecting From Web of "Как сохранить постоянный скрипт PHP?"

myscript.php & 

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

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

 ps aux | grep myscript.php 

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

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

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

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

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

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

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

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

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

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

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

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