На сервере поднимаю 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. Понятное дело, что нужно избегать всяких ошибок, а не постоянно перезапускать его, но все же :)
Для таких задач можно использовать 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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Сидел себе спокойно работал, обновлял страницу в браузере дабы отслеживать изменения и вдруг (Не удается получить доступ к сайту) смотрю...
Начал учить laravel, и наткнулся на странную вещь
Всем приветРазбираюсь с REST API, помогите пожалуйста разобрать один момент