2017-02-09 14 views
0

Я столкнулся с ошибкой при попытке остановить NGINX используя supervisord.Supervisord - NGINX stop OSError

Чтобы начать NGINX без ошибок из supervisord я должен был предварять sudo команде Nginx в supervisord.conf:

[supervisord] 
[program:nginx] 
command=sudo nginx -c %(ENV_PWD)s/configs/nginx.conf 

Когда я запускаю это:

$ supervisord -n 
2017-02-09 12:26:06,371 INFO RPC interface 'supervisor' initialized 
2017-02-09 12:26:06,372 INFO RPC interface 'supervisor' initialized 
2017-02-09 12:26:06,372 CRIT Server 'unix_http_server' running without any HTTP authentication checking 
2017-02-09 12:26:06,373 INFO supervisord started with pid 22152 
2017-02-09 12:26:07,379 INFO spawned: 'nginx' with pid 22155 
2017-02-09 12:26:08,384 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 

^C# SIGINT: Should stop all processes 

2017-02-09 13:59:08,550 WARN received SIGINT indicating exit request 
2017-02-09 13:59:08,551 CRIT unknown problem killing nginx (22155):Traceback (most recent call last): 
    File "/Users/ocervell/.virtualenvs/ndc-v3.3/lib/python2.7/site-packages/supervisor/process.py", line 432, in kill 
    options.kill(pid, sig) 
    File "/Users/ocervell/.virtualenvs/ndc-v3.3/lib/python2.7/site-packages/supervisor/options.py", line 1239, in kill 
    os.kill(pid, signal) 
OSError: [Errno 1] Operation not permitted 

же при использовании supervisorctl, чтобы остановить процесс :

$ supervisorctl stop nginx 
FAILED: unknown problem killing nginx (22321):Traceback (most recent call last): 
    File "/Users/ocervell/.virtualenvs/ndc-v3.3/lib/python2.7/site-packages/supervisor/process.py", line 432, in kill 
    options.kill(pid, sig) 
    File "/Users/ocervell/.virtualenvs/ndc-v3.3/lib/python2.7/site-packages/supervisor/options.py", line 1239, in kill 
    os.kill(pid, signal) 
OSError: [Errno 1] Operation not permitted 

Есть ли обходной путь для этого?

+0

Вопрос в том, почему вы хотите начать nginx с надзором? Он демонизирует, что означает, что он выходит, и супервизор будет обнаруживать это как отказ (это не так). Его нужно запускать с помощью sudo, поскольку он связывается с низкими номерами портов (80 и 443). Пересмотрите ваше решение контролировать этого демона. Чтобы заставить nginx работать так, чтобы супервизор мог выполнять свою работу, вы должны сказать, что это не для демонализации. [Обратитесь к этому, из nginx docs] (http://nginx.org/en/docs/faq/daemon_master_process_off.html). –

+0

Запуск nginx работает, у меня есть «daemon off» в конфигурации nginx. Проблема заключается в том, как убить его с помощью супервизора. Причина, по которой я хочу запускать/останавливать nginx с супервизором, заключается в том, что мне нужен переключатель включения/выключения для всех процессов, которые я запускаю (веб-серверы, redis, rabbitmq и т. Д.), Включая nginx. –

+0

Просто пытаясь нанести удар в темноте здесь - 'sudo supervisorctl stop nginx', вы пробовали это еще? –

ответ

0

Если процесс, созданный supervisord, создает свои дочерние процессы, супервизор не может их убить.

...

pidproxy программа помещается в вашу конфигурацию в $ BINDIR при установке супервизор (это «консольный скрипт»). [1]

Так что вы должны сделать, это изменение конфигурации supervisord как это:

[program:nginx] 
command=/path/to/pidproxy /path/to/nginx-pidfile sudo nginx -c %(ENV_PWD)s/configs/nginx.conf 

Это не может работать либо, так как процесс Nginx является создание на sudo. Но давайте попробуем сначала.

+0

Пробовал запуск' pidproxy /tmp/nginx.pid sudo nginx -c \ 'pwd \'/configs/nginx.conf' в моем терминале, не жаловался, но я не см. процесс nginx. –

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

  • Нет связанных вопросов^_^