我正在使用 Django command 开始 gunicorn python manage.py run_gunicorn
。如何正确停止 gunicorn?
注意:我有一个带有结构的半自动服务器部署。因此,使用诸如ps aux | grep gunicorn
通过 pid 手动终止进程之类的方法不是一种选择。
我正在使用 Django command 开始 gunicorn python manage.py run_gunicorn
。如何正确停止 gunicorn?
注意:我有一个带有结构的半自动服务器部署。因此,使用诸如ps aux | grep gunicorn
通过 pid 手动终止进程之类的方法不是一种选择。
查看进程ps ax|grep gunicorn
并停止 gunicorn_django 是pkill gunicorn
.
一种选择是Supervisor
用来管理 Gunicorn。
然后我又不明白为什么你不能通过Fabric
. 假设您让 Gunicorn编写一个 pid 文件Fabric
,您可以在命令中轻松读取该文件。
像这样的东西应该工作:
run("kill `cat /path/to/your/file/gunicorn.pid`")
pkill gunicorn
或者
pkill -P1 gunicorn
应该杀死所有正在运行的 gunicorn 进程
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
显示具有特定端口的守护进程。
这是对我有用的命令:
pkill -f gunicorn
它将杀死任何名为 gunicorn 的进程
启动在 gunicorn 上运行的服务
sudo systemctl enable myproject
sudo systemctl start myproject
或者
sudo systemctl restart myproject
但是要停止在 gunicorn 上运行的服务
sudo systemctl stop myproject
要了解有关使用 gunicorn 托管 python 应用程序的更多信息,请参阅此处
开始:
gunicorn --pid PID_FILE APP:app
停止:
kill $(cat PID_FILE)
的--pid
标志gunicorn
需要一个参数:将存储进程 ID 的文件。该文件也会在服务停止时自动删除。
为了简单起见,我PID_FILE
使用了类似的东西/tmp/MY_APP_PID
作为文件名。
如果 PID 文件存在,则表示服务正在运行。如果不存在,则服务未运行。要停止服务,只需按上述方式将其杀死。
您可能还希望包含该--daemon
标志,以便将进程与当前 shell 分离。
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 gunicorn
并gunicorn -v
找出答案。
如果您错误地运行了它,并且您想在不编写额外脚本且不重新启动服务器的情况下停止它。所以这里有一个技巧。
一、卸载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