2013-10-22 105 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

相關問題