2011-01-17 4 views
8

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

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

+4

Возможный дубликат [Запуск php-скрипта в качестве процесса демонов] (http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process) –

+2

Много хорошей информации: http: // stackoverflow .com/поиск?q = php + daemon –

+1

проверить «экранную» утилиту, а также отсоединить сеанс от ssh (и снова подключить его позже, если хотите) – regilero

ответ

6
myscript.php & 

Это будет запустить scriptin фона

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

ps aux | grep myscript.php 

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

+0

Вы можете переопределить его с помощью 'set_time_limit'. –

+4

нет предела времени при запуске из командной строки – Patrick

+0

@Patrick полезно знать! – ActionOwl

2

Запуск сценария в фоновом режиме через SSH, как описано здесь: Getting ssh to execute a command in the background on target machine

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

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

Другое решение: How to check if a php script is still running

-1

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

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

+1

Я считаю, что ' $ something = 0; 'является присваиванием, а не истинным/ложным тестом.;) Но я уверен, что вы это знали. Другое дело, что если вы основываете что-либо на сценарии цикла, если только ваша логика (сценарий/функция ... что угодно) блокирует что-либо - любые петли, пока «холостой» вообще не будут простаивать, но напрягают серверное CPU, тратя драгоценные ресурсы на общесистемный или, по крайней мере, виртуальный серверный охват. – Tore

0

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

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

1

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

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

+0

Это был бы мой первый выбор. – musicliftsme

Смежные вопросы