2013-10-22 109 views
15

我使用一个主管来运行uWSGI应用程序。为什么uWSGI应用程序在停止监督员之后并不总是停止? 主管配置:如何使用主管启动/停止uWSGI应用程序?

[program:test] 
autostart = true 
user=root 
command=uwsgi --master --workers 5 --disable-logging --socket 127.0.0.1:8888 
--module web --callable app 
priority=1 
redirect_stderr=true 
stdout_logfile = /data/log 

回答

33

默认情况下,主管发送SIGTERM停止。 uWSGI中的SIGTERM意味着'残酷的重新加载'。

你必须改变它退出或INT:

stopsignal = QUIT

应该足够

的另一种方法(泄气)是添加--die上长期到uWSGI命令行更改其默认行为

+0

为什么它的泄气? –

+0

因为只有在使用主管时才需要此选项。在主管的配置中修改主管的行为更好。 – Raz

+2

我对这两种方法都没有什么经验,但是当我正在寻找正确的配置时,我发现了几个显然只能通过使用'die-on-term'来解决的问题的例子,例如http://stackoverflow.com/a/22213404/202168 https://github.com/unbit/uwsgi/issues/296 – Anentropic

2
  1. 项目主管的配置文件

    添加stopsignal=INT

  2. 项目uwsgi配置文件

    删除daemonize=xxx.log如果使用 “流程=#” 到您的uwsgi配置禁用守护进程模式

3

,还必须使用“master = true”。否则,主管只会杀死其中一名工人。

然后:

/etc/supervisor/conf.d/app.conf

stopsignal = QUIT 

/etc/uwsgi/app.ini

processes = 4 
master = true 
+0

我使用了'stopsignal = QUIT',但在supervisorctl中停止后,一些新的uwsgi进程由pid 1创建。'stopsignal = INT'确实停止的事情。 – Kyan

相关问题