2017-02-09 26 views
0

我試圖用supervisord停止NGINX時遇到錯誤。Supervisord - NGINX停止OSError

要啓動NGINX沒有錯誤從supervisord我曾在supervisord.conf前面加上sudo到nginx的命令:

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

當我運行此:

使用 supervisorctl何時停止過程
$ 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 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?它守護進程,這意味着它退出,supervisord會檢測到失敗(不是)。它必須與sudo一起運行,因爲它綁定到低端口號(80和443)。重新考慮你監督守護進程的決定。爲了讓nginx運行,所以主管可以完成它的工作,你必須告訴它不要守護進程。 [請參考nginx文檔](http://nginx.org/en/docs/faq/daemon_master_process_off.html)。 –

+0

啓動nginx工程,我在nginx配置中關閉了'daemon'。問題是如何與主管一起殺死它。我想用supervisor啓動/停止nginx的原因是,我需要爲所有正在運行的進程(webservers,redis,rabbitmq等)啓用/關閉開關,包括nginx。 –

+0

試圖在黑暗中刺傷 - 「sudo supervisorctl stop nginx」,你試過了嗎? –

回答

0

如果由supervisord創建的進程創建自己的子進程,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進程。 –