如何正确地停止枪炮

时间:2013-01-30 13:00:55

标签: django gunicorn django-manage.py

我正在使用Django命令python manage.py run_gunicorn开始使用gunicorn。我怎样才能正确地停止枪炮?

注意:我使用fabric进行半自动服务器部署。因此,使用像ps aux | grep gunicorn这样的东西来手动杀死pid的过程不是一种选择。

8 个答案:

答案 0 :(得分:61)

要查看流程ps ax|grep gunicorn并停止gunicorn_django pkill gunicorn

答案 1 :(得分:21)

一种选择是使用Supervisor来管理Gunicorn。

然后我再也看不出为什么你不能通过Fabric杀死这个过程。 假设您让Gunicorn write a pid file可以轻松地在Fabric命令中读取该文件。

这样的事情应该有效:

run("kill `cat /path/to/your/file/gunicorn.pid`")

答案 2 :(得分:3)

开始:

gunicorn --pid PID_FILE APP:app

停止:

kill $(cat PID_FILE)

--pidgunicorn 标志需要一个参数:将存储进程 ID 的文件。该文件也会在服务停止时自动删除。

为了简单起见,我使用了 PID_FILE,但您应该使用 /tmp/MY_APP_PID 之类的名称作为文件名。

如果 PID 文件存在,则表示服务正在运行。如果它不存在,则该服务未运行。要停止该服务,只需将其终止即可。

您还可以包含 --daemon 标志,以便将进程与当前 shell 分离。

答案 3 :(得分:2)

pkill gunicorn

pkill -P1 gunicorn

应该杀死所有正在运行的Gun​​icorn进程

答案 4 :(得分:0)

kill -9 `ps -eo pid,command | grep 'gunicorn.*${moduleName:appName}' | grep -v grep | sort | head -1 | awk '{print $1}'`

ps -eo pid,command仅获取进程ID,命令和参数

grep -v grep摆脱“ grep --color = auto xxx”之类的输出

sort | head -1进行升序排序并获得第一行

awk '{print $1}'以获取pid

您可能还需要注意的一件事:Gunicorn的安装位置以及使用的是哪个?

Ubuntu 16默认情况下安装了gunicorn,可执行文件是gunicorn3,位于/ usr / bin / gunicorn3上,如果通过pip安装,则位于/ usr / local / bin / gunicorn。您需要使用which gunicorngunicorn -v来找出答案。

答案 5 :(得分:0)

pkill gunicorn停止所有gunicorn守护程序。因此,如果您正在使用不同的端口运行多个gunicorn实例,请尝试以下shell脚本。

#!/bin/bash
Port=5000
pid=`ps ax | grep gunicorn | grep $Port | awk '{split($0,a," "); print a[1]}' | head -n 1`
if [ -z "$pid" ]; then
  echo "no gunicorn deamon on port $Port"
else
  kill $pid
  echo "killed gunicorn deamon on port $Port"
fi

ps ax | grep gunicorn | grep $Port显示具有特定端口的守护程序。

答案 6 :(得分:0)

要启动在gunicorn上运行的服务

sudo systemctl enable myproject

sudo systemctl start myproject

sudo systemctl restart myproject

但是要停止在gunicorn上运行该服务

sudo systemctl stop myproject

了解更多有关使用gunicorn please refer here进行python应用程序托管的信息

答案 7 :(得分:0)

如果您运行它是我的错误,并且您想在不编写额外脚本和不重新启动服务器的情况下停止它。所以这是一个技巧。

第一个卸载 gnuicorn

sudo pip3 uninstall gunicorn # i am using python3 in ubuntu server so i am using sudo and pip3

然后终止为您的应用程序端口号运行的进程(我假设端口号默认为 8000)。

要获取运行您的应用的进程号,请使用以下命令:

sudo lsof -i:8000

结果

COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
gunicorn 17XX95 root    6u  IPv4 155XXXX      0t0  TCP localhost:8000 
gunicorn 17XX97 root    6u  IPv4 155XXXX      0t0  TCP localhost:8000 

然后杀掉进程,有可能得到不止一个进程id(PID),见上面的结果。

sudo kill 17XX95 17XX97 

现在如果你想重新安装gunicorn你可以安装它

sudo pip3 install gunicorn