Supervisor管理python web服务 / 网络研习社#88
Supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
因为是python开发的一个库,可以直接用pip来安装,很方便。supervisor安装完成后会生成三个执行程序:supervisord、supervisorctl、echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。
pip install supervisor #supervisor-4.2.5
echo_supervisord_conf #查看基本配置
echo_supervisord_conf > /home/wsgi.ini #生成初始配置文件
# 配置范例
[program:wsgiX] ;program:名称
;工作目录(脚本启动目录的全路径)
directory=/home/knowqa
;启动命令,当然你可以直接 python api.py,此处使用gunicorn启动
command = /home/knowqa/know_env/bin/python /home/knowqa/know_env/bin/gunicorn -c config.py api:app
startsecs=0
stopwaitsecs=0
autostart=true ;supervisord守护程序启动时自动启动tornado
autorestart=true ;supervisord守护程序重启时自动重启tornado
redirect_stderr=true ;将stderr重定向到stdout
;日志标准输出路径,同时脚本print打印信息也会在改文件显示
stdout_logfile=./stdout.log
stderr_logfile=./error.log
;守护进程,可在 web 上访问
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; (ip_address:port specifier, *:port for all iface) 127.0.0.1
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
;supervisord日志配置
[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=1
# 启动
supervisord -c ./wsgi.ini
//supervisord -c /home/wsgi.ini
查看运行状态
ps -ef | grep supervisord
看到如上所示,即运行正常。如果要停止,则直接kill, 比如: kill 197320 。命令如下:
kill pid #停止运行
在Supervisor的使用中,其中“工作目录”和 “启动命令”是最关键的两处设置,务必正确! 在“启动命令”时可以看到是使用gunicorn来启动服务的,就来补下gunicorn的设置。
Gunicorn
Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server,和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。
pip install gunicorn
# 快速启动run.py
gunicorn --workers=4 --bind=0.0.0.0:8000 run:app
# run.py
from flask import Flask
app = Flask(__name__)
# 配置文件启动
命令行中定义的参数,都可以放在配置文件中。
# 配置文件范例 config.py
import multiprocessing
bind = "0.0.0.0:8000"
workers = multiprocessing.cpu_count() * 2 + 1
backlog = 2048
worker_class = "eventlet"
worker_connections = 1000
daemon = True
pidfile = 'log/gunicorn.pid'
accesslog = 'log/access.log'
errorlog = 'log/gunicorn.log'
# 启动
gunicorn --config=config.py run:app
# 服务重启、退出等
获取Gunicorn进程树,用下面的命令获取gunicorn的Master PID
#方法1
pstree -ap|grep gunicorn
#方法2
ps -ef|grep gunicorn
# 重启Gunicorn进程
HUP(终端断线)信号发出之后,worker进程会进行被杀掉,并启动新的进程,保证源代码的修改会反映进来。master进程不会变。
kill -HUP master_pid
# 优雅停止Gunicorn进程
pkill gunicorn
kill -9 master_pid
Leave Supervisor管理python web服务 / 网络研习社#88 to:
Read more #cn posts
Best Posts From lemooljiang
We have not curated any of lemooljiang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From lemooljiang
- Nextjs初体验,和Nuxt的异同
- DeepTutor:AI个性化辅导平台 / ai #57
- ComfyUI:可编程和自动化的PS / ai #56
- 将Neo4j封装进Agent / ai #55
- 闲鱼省钱大法:极限0.5折!
- 对Neo4j批量导入结构化数据 / ai #54
- langchain对neo4j进行交互,写入和查询数据 / ai #53
- 知识图谱和图数据库Neo4j的作用和使用场景 / ai #52
- SpaceX、美股和比特币
- 又是币圈血洗日!
- 链股合流,当币安也开始卖股票啰
- 天涯社区重启,爷青回?
- 诺基亚在AI时代重新杀回来啦
- 《2049:未来10000天的可能》书中的镜像世界为什么不叫元宇宙
- 今天适合吃披萨
- 开通即被封,别再给Claude送人头了!
- 两根内存条引发的“官司”
- AI·Joe V12更新, 更新GPT-5.5和DeepSeek V4 等
- 中医进校园活动反响热烈
- 猪价低伤农,猪价贵伤民