Как обеспечить вечную работу PHP скрипта?

Всем привет. При работе с websocket нужно держать скрипт сервера постоянно запущенным. Я знаю только как стартовать его из консоли, но ведь может случиться и так, что он упадёт. Как-то можно сделать, чтобы он автоматически поднимался?
  • Вопрос задан
  • 3152 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Пригласить эксперта
Ответы на вопрос 6
MAKAPOH
@MAKAPOH
многостаночник
Как-то можно сделать, чтобы он автоматически поднимался?

Запускать скрипт с помощью supervisord с флагом autorestart.
Ответ написан
Комментировать
boonya
@boonya
Backend developer (Python/PHP)
Если по феншую, то php рожден, чтобы умирать. Вот неплохая статья об этом.
Но если уж очень хочется, то мы (в том числе на продакшн серверах) используем upstart для запуска и восстановления после падений скриптов. А воркеры (так мы их называем) выполнены в виде простых bash скриптов с чем-то типа
#!/usr/bin/env bash
while  true; do
    php some-script.php
    sleep 3
done

Но так мы обрабатываем очереди. В случае с WebSockets нужны не блокируемые скрипты. Сам никогда не пользовался, но читал о подобных штуках reactphp.org
Ответ написан
Комментировать
hummingbird
@hummingbird
В CRON повесить проверку, например.
В свою очередь bash скрипт будет проверять, висит ли такой php скрипт в процессе.
Ответ написан
@rPman
Оформить php как сервис, в зависимости от того, какая система загрузки установлена читаnь документацию, upstart, systemd и т.п. во всех случаях это будет либо простейший скрипт (скопированный из примеров документации или из интернета) в котором вы укажете запуск своего php в виде запуска в цикле на том же bash - while(true);do php main.php;slep 1;done или на любом другом скриптовом языке, пусть и php.

Рекомендую реализовать хоть какой то контроль над причиной завершения работы вашего скрипта, через код ошибки, или свои средства логирования и состояния, и корректно отрабатывать ситуацию с ошибками, чтобы не получилось бесконечный запуск приложения с немедленным выходом (допускается остановка с отсылкой сообщения администратору или к примеру экспоненциальный рост времени между перезапуском, если это происходит сразу), но это общие советы с любыми вечноработающими приложениями.
Ответ написан
Комментировать
Зачем поднимать вебсокеты на php? Скачайте любой нормальный сервер, cetrifugo например, что херней-то страдать?
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
daemon.io - хороший велосипед для Вашей задачи
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы