Как поддерживать постоянную работу скрипта в фоновом режиме?

214
20 апреля 2022, 16:20

На сервере поднимаю websocket сервер Workerman. Данный сервер запускается через командную строку (php cli) командой php start.php start. Для того, чтоб сокет сервер работал в фоновом режиме использую nohup и запускаю таким образом nohup php Daemon.php start 2>&1 &. Столкнулся с такой проблемой, что если вдруг в сокет сервере произойдет какой-то сбой, то он просто останавливается и соответственно пока еще раз в ручную его не запустишь, он работать не будет. Как можно сделать так, чтоб в случае каких-то сбоев сокет сервер сам перезапускался?

Пример вывода nohup.out, когда происходит остановка сервера:

------------------------------------------- WORKERMAN --------------------------------------------
Workerman version:4.0.10          PHP version:5.6.40-0+deb8u11
-------------------------------------------- WORKERS ---------------------------------------------
proto   user            worker          listen                      processes    status           
ssl     user            none            websocket://0.0.0.0:1234    1             [OK]            
--------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
SSL handshake error: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request 
Workerman[start.php] stopping ...
Workerman[start.php] stopping ...
Workerman[start.php] has been stopped

В данном случае произошла ошибка "рукопожатия" и все, сервер упал.

P.s. Понятное дело, что нужно избегать всяких ошибок, а не постоянно перезапускать его, но все же :)

Answer 1

Для таких задач можно использовать supervisor.

apt-get install supervisor

В файле /etc/supervisor/supervisord.conf (ubuntu, debian) или в /etc/supervisord.conf для остальных, добавляем нового воркера

[program:php-socket]
command=php /path/to/my/server.php
stdout_logfile=/var/log/worker.log
autostart=true
autorestart=true
user=www-data
numprocs=1

Если вам принципиально использовать nohup тогда поменяем command на command=nohup php /path/to/my/server.php. Но как по мне в этом нет осой необходимости, так как супервизор сразу же подниме скрипт. Есть смысл если не ходите глобально увеличивать максимальное время работы скрипта set_time_limit

READ ALSO
Вывод готового изображения php скриптом

Вывод готового изображения php скриптом

В общем стоит такая задача:

151
Перестал работать openserver

Перестал работать openserver

Сидел себе спокойно работал, обновлял страницу в браузере дабы отслеживать изменения и вдруг (Не удается получить доступ к сайту) смотрю...

102
The POST method is not supported for this route

The POST method is not supported for this route

Начал учить laravel, и наткнулся на странную вещь

178
REST API Как разделить grant type password и client_credentials в запросах

REST API Как разделить grant type password и client_credentials в запросах

Всем приветРазбираюсь с REST API, помогите пожалуйста разобрать один момент

202