2016-08-14 88 views
4

我有我使用uwsgi像這樣運行一個Python金字塔應用:如何在啓動後停止uWSGI服務器?

sudo /finance/finance-env/bin/uwsgi --ini-paste-logged /finance/corefinance/production.ini 

一旦它的運行和我的窗口時間了,我無法停止服務器,而無需重新啓動整個盒子。我如何停止服務器?

+0

你無法阻止天網。 –

回答

2

可以使用標準的Linux命令殺死uwsgi過程:

killall uwsgi 

# ps ax|grep uwsgi 
12345 
# kill -s QUIT 12345 

後者命令允許你做一個優雅的重裝或者立即殺死整個堆棧depending on the signal您發送。

但是,您正在使用的方法在生產中通常不會使用:通常您會告訴操作系統在啓動時啓動您的應用程序,並在其崩潰時重新啓動它。否則,您可以在至少方便的時間內保證有一天會有驚喜:) Uwsgi文檔有Upstart/Systemd的啓動腳本/作業的examples

另外,還要確保你沒有真正運行uwsgi的根 - 也sudo在命令令我生厭,但我希望你有你的production.ini所以Uwsgi改變啓動時的有效用戶uid/gid選項。以root身份運行Web服務器從來就不是一個好主意。

+0

不幸的是,在不使用sudo的情況下運行該命令給了我「bind():Permission denied [core/socket.c line 769]」 –

+0

@JeremyT:你需要'root'來綁定到低於1024的端口。需要通過在配置或命令行中指定'uid'和'gid'選項來確保uWSGI在啓動後放棄權限(即,它更改爲非特權用戶ID)。 – Sergey

+0

那麼,你是說最好不要嘗試找出如何在不使用sudo的情況下啓動進程,或者我應該使用sudo並將它設置爲在啓動後更改用戶? –

3

如果添加--pidfile ARG的啓動命令

sudo /finance/finance-env/bin/uwsgi --ini-paste-logged /finance/corefinance/production.ini --pidfile=/tmp/finance.pid 

你可以用下面的命令停止

sudo /finance/finance-env/bin/uwsgi --stop /tmp/finance.pid 

你也可以用下面的命令重新啓動它

sudo /finance/finance-env/bin/uwsgi --reload /tmp/finance.pid