У меня есть PHP-скрипт, который прослушивает входящие запросы сокетов и т. Д. Мне нужно, чтобы этот скрипт постоянно работал (он работает в бесконечном цикле) на сервере.
Как я могу инициировать и управлять этим процессом? Я попробовал только запустить его через SSH / putty, но как только соединение SSH истечет, скрипт умирает.
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.