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

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

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

Ответ 1

myscript.php &

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

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

ps aux | grep myscript.php

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

Ответ 2

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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