Вопрос: Запуск (и мониторинг) nginx с помощью супервизора


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

use case: у меня есть сервер CentOS, в котором размещаются несколько веб-приложений. Я хочу быть уверенным, что мой веб-сервер и сервер приложений будут работать. Мой стек выглядит

  • веб-сервер: nginx
  • сервер приложений: uWSGI
  • веб-фреймворк: колба / питон

Я хочу использовать supervisord для мониторинга nginx и uWSGI. В моем /etc/supervisor.conf у меня есть

[program:nginxgo]
command = /usr/sbin/nginx
autostart=true
autorestart=unexpected
exitcodes=0
stdout_logfile=/home/webdev/nginxgo.log
stderr_logfile=/home/webdev/nginxgoerr.log

[program:uwsgi_emperor_go]
command = uwsgi --emperor /etc/uwsgi/emperor.ini
autostart=true
autorestart=unexpected
stopsignal=INT
stdout_logfile=/home/webdev/emp.log
stderr_logfile=/home/webdev/emperr.log
directory=/home/webdev/
user=webdev

Я начал процесс uWSGI. Когда я вхожу [root@mymachine]# /usr/local/bin/supervisord -n -c /etc/supervisord.conf

выход

2014-11-26 14:07:56,917 CRIT Supervisor running as root (no user in config file)
2014-11-26 14:07:56,951 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2014-11-26 14:07:56,952 INFO supervisord started with pid 31068
2014-11-26 14:07:57,957 INFO spawned: 'nginxgo' with pid 31071
2014-11-26 14:07:57,970 INFO spawned: 'uwsgi_emperor_go' with pid 31072
2014-11-26 14:07:59,095 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:07:59,095 INFO success: uwsgi_emperor_go entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:08:00,601 INFO exited: nginxgo (exit status 1; not expected)
2014-11-26 14:08:01,607 INFO spawned: 'nginxgo' with pid 31079
2014-11-26 14:08:02,684 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:08:04,189 INFO exited: nginxgo (exit status 1; not expected)
2014-11-26 14:08:05,194 INFO spawned: 'nginxgo' with pid 31080
2014-11-26 14:08:06,264 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:08:07,771 INFO exited: nginxgo (exit status 1; not expected)
2014-11-26 14:08:08,775 INFO spawned: 'nginxgo' with pid 31081
2014-11-26 14:08:09,808 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:08:11,314 INFO exited: nginxgo (exit status 1; not expected)
2014-11-26 14:08:12,319 INFO spawned: 'nginxgo' with pid 31082
2014-11-26 14:08:13,381 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:08:14,886 INFO exited: nginxgo (exit status 1; not expected)
^C2014-11-26 14:08:15,601 INFO spawned: 'nginxgo' with pid 31083
2014-11-26 14:08:15,603 WARN received SIGINT indicating exit request
2014-11-26 14:08:15,611 INFO waiting for nginxgo, uwsgi_emperor_go to die
2014-11-26 14:08:16,738 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:08:18,242 INFO exited: nginxgo (exit status 1; not expected)
2014-11-26 14:08:19,244 INFO waiting for uwsgi_emperor_go to die
2014-11-26 14:08:21,607 INFO stopped: uwsgi_emperor_go (exit status 0)

Посмотрите, как это говорит

2014-11-26 14:07:59,095 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2014-11-26 14:07:59,095 INFO success: uwsgi_emperor_go entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

но затем он начинает просто циклировать процесс nginxgo. Я убиваю экземпляр супервизора с помощью CTRL-C, и я вижу в htop что nginx master process а также worker process оба являются активными.

Все, что я хочу, это начать nginx и мой uWSGI emperor при запуске / перезапуске сервера или сбое любой программы


5
2017-11-26 19:17


Источник




Ответы:


supervisord может обрабатывать только процессы на переднем плане. Значение по умолчанию для nginx выполняется в фоновом режиме в качестве демона.

Чтобы убедиться, что ваш nginx работает с supervisord, вы должны установить «daemon off» в свой nginx.conf (см. Также документ nginx на http://nginx.org/en/docs/ngx_core_module.html#daemon).


8
2017-11-26 20:53



В конфигурации nginx введите daemon off то он работает с супервизором - Brian Leach
Имеет ли stop когда вы используете эту технику? start работал на меня после того, как я добавил sudo в супервизор command атрибут. Я попытался запустить supervisorctl stop nginx и он жаловался OSError, - Olivier Cervello