Supervisord - NGINX停止OSError

时间:2017-02-09 20:01:20

标签: nginx supervisord

尝试使用NGINX停止supervisord时遇到错误。

要从NGINX开始supervisord而不出错,我必须在sudo中将supervisord.conf添加到nginx命令中:

[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

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

  

如果由supervisord创建的进程创建了自己的子进程,则supervisord无法杀死它们。

     

...

     

当安装了supervisor时,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创建的。但是,让我们先试试吧。