69

我正在使用 Django command 开始 gunicorn python manage.py run_gunicorn。如何正确停止 gunicorn?

注意:我有一个带有结构的半自动服务器部署。因此,使用诸如ps aux | grep gunicorn通过 pid 手动终止进程之类的方法不是一种选择。

4

9 回答 9

114

查看进程ps ax|grep gunicorn并停止 gunicorn_django 是pkill gunicorn.

于 2013-01-30T13:29:45.443 回答
33

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

然后我又不明白为什么你不能通过Fabric. 假设您让 Gunicorn编写一个 pid 文件Fabric,您可以在命令中轻松读取该文件。

像这样的东西应该工作:

run("kill `cat /path/to/your/file/gunicorn.pid`")
于 2013-01-30T13:19:50.963 回答
18
pkill gunicorn

或者

pkill -P1 gunicorn

应该杀死所有正在运行的 gunicorn 进程

于 2020-10-28T11:21:20.200 回答
17

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显示具有特定端口的守护进程。

于 2018-08-15T21:25:30.513 回答
5

这是对我有用的命令:

pkill -f gunicorn

它将杀死任何名为 gunicorn 的进程

于 2021-08-12T10:52:12.703 回答
4

启动在 gunicorn 上运行的服务

sudo systemctl enable myproject

sudo systemctl start myproject

或者

sudo systemctl restart myproject

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

sudo systemctl stop myproject

要了解有关使用 gunicorn 托管 python 应用程序的更多信息,请参阅此处

于 2020-10-01T06:35:18.347 回答
4

开始:

gunicorn --pid PID_FILE APP:app

停止:

kill $(cat PID_FILE)

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

为了简单起见,我PID_FILE使用了类似的东西/tmp/MY_APP_PID作为文件名。

如果 PID 文件存在,则表示服务正在运行。如果不存在,则服务未运行。要停止服务,只需按上述方式将其杀死。

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

于 2021-01-13T09:54:29.790 回答
2
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找出答案。

于 2018-08-15T06:44:14.100 回答
0

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

一、卸载gunicorn

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
于 2021-07-12T13:30:11.470 回答