-
Flask
# 这里的__name__,如果是直接跑这个文件来启动app,则是__main__
# 如果是通过其他项目,比如Gunicorn来运行本文件来启动app, 则是本文件名,如abc.py,就是abc
app = Flask(__name__)
- Gunicorn
Gunicorn-配置参数
Program behavior when kill -HUP is recieved?
Linux命令:
-
查看那个pid占用了端口
ss -lptn 'sport = :xxx'
-
运行Gunicorn
#!/bin/bash
gunicorn --config run_gunicorn.py flaskFileName:app
- kill Gunicorn的进程
# kill -9 的方式杀掉GUnicorn进程的话,端口不会立即释放
# 需要通过 ss -lptn 'sport = :xxx比如8080' 来发现那个pid 占用了端口,然后kill此process来解除端口占用
# 因此改成了kill
for id in `cat gunicorn.pid`;
do
kill -9 $id;
done
# 清空pid,防止重复kill导致kill掉了其他人的进程
echo "" > gunicorn.pid
- 重新加载gunicorn的配置和Flask里的代码
Program behavior when kill -HUP is recieved?
#!/bin/bash
# 守护进程重新加载配置run_gunicorn.py,执行后,守护进程pid不变,子进程被重新创建,为新的pid
# https://unix.stackexchange.com/questions/15601/program-behavior-when-kill-hup-is-recieved
for id in `cat gunicorn.pid`;
do
kill -HUP $id;
done
- 查看Gunicorn的相关进程
ps aux command and ps command explained
#!/bin/bash
# https://linuxhint.com/linux-pstree-command-tutorial/
echo "pstree:"
pstree -apcnuh|grep gunicorn |grep $(whoami) # 运行中的当前用户的gunicorn进程。进程名也可能为为python等,这时候pstree需要有-a的参数,才能显示这个进程
echo "ps:"
echo "UID PID PPID %CPU STIME TTY CPU_TIME CMD"
# ps -aux|grep run_gunicorn.py 此命令不能显示ppid
# ps -ux|grep gunicorn 此命令不能显示ppid
ps -ef|grep gunicorn |grep $(whoami) # 显示当前用户的gunicorn相关的进程以及进程的详细信息 ppid为1则可能为守护进程或者孤儿进程
echo "port 8080:"
ss -lptn 'sport = :8080'
注意,用gunicorn --config run_gunicornConfig.py flaskFileName:app
形式启动的gunicorn服务,可能进程名为python,这时候pstree需要有-a的参数,才能显示这个进程。-a含义:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示
- 其他参考
supervisor + gunicorn + flask:日志服务管理(生产环境"level" 需要设置成 "INFO",以避免打日志拖累性能。此日志配置不支持热加载,即需要server_kill后server_run才生效,只是server_reload无效)
网友评论