Как сохранить постоянный запуск 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
Ответ 3
Вы можете использовать браузер, если используете ignore_user_abort() и set_time_limit()
Ответ 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.