前言
使用python3来处理redis 消息队列,记录下生产部署方案
「生产部署方案」:
- 多进程(动态扩容)
 - 无限自愈
 - 日志自动压缩
 - 系统级守护
 - 可多队列多worker
 
终极稳健版:PM2 + Logrotate + 自动扩容 + 守护链
适合:
- Python 消费消息队列(如 RabbitMQ / Redis / Kafka)
 - 长期运行、吞吐量大、CPU吃满
 - 需要自动扩容/无限重启/日志不爆盘
 
1)增强版 ecosystem.config.js
 
module.exports = {apps: [{name: "queue-worker",script: "worker.py",interpreter: "python3",instances: "max",            //  自动用满 CPU 核心 (动态扩容)exec_mode: "fork",autorestart: true,max_restarts: 0,             //  无限重启restart_delay: 5000,         //  每次重启间隔 5 秒(防止频繁挂死)out_file: "./logs/out.log",error_file: "./logs/err.log",merge_logs: true,log_date_format: "YYYY-MM-DD HH:mm:ss",// 环境变量 (可选)env: {ENV: "production"}}]
}
 
新加的稳健细节
instances: "max"👉 自动用满服务器CPU,吞吐最大化(多核并发)restart_delay: 5000👉 挂了重启时,隔5秒(防止疯狂重启,保护系统)max_restarts: 0👉 无限重启,保证永远活着
2)高级日志管理:pm2-logrotate 配置
 
继续用 PM2 官方日志切割模块:
安装一次:
pm2 install pm2-logrotate
 
稳定生产配置:
# 单个日志文件最大 100MB
pm2 set pm2-logrotate:max_size 100M# 每天0点自动切割
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'# 日志自动 gzip 压缩
pm2 set pm2-logrotate:compress true# 保留最近 30 份,其他自动删
pm2 set pm2-logrotate:retain 30# 每个日志加时间戳
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
 
3)PM2 启动 + 守护链
启动 worker
pm2 start ecosystem.config.js
 
保存 & 开机自动守护
pm2 save         # 保存当前进程列表
pm2 startup      # 设置开机自启 (输出一条命令,复制执行即可)
 
重启服务器后,PM2 会自动帮你拉起 worker
无需手动启动。
4)动态扩容 / 缩容 Worker
| 操作 | 命令 | 
|---|---|
| 扩容到 8 个进程 | pm2 scale queue-worker 8 | 
| 缩容到 2 个进程 | pm2 scale queue-worker 2 | 
| 恢复 CPU自动模式 (最大核) | pm2 scale queue-worker max | 
👉 动态扩容:你根据队列压力,随时弹性扩容/缩容 worker 数量,不需要重启整个服务。
5)健康监控 & 自动修复
实时查看 worker 状态
pm2 list
 
查看具体日志
pm2 logs queue-worker
 
如果 worker 进程挂掉?
- PM2 会自动重启(
max_restarts: 0+restart_delay) 
6)推荐加分:搭配系统级 Supervisor 守护 PM2
为了做到**“连 PM2 自己挂了也能自动拉起”**:
- 可以让 systemd / Supervisor 来守护 PM2
 - 这样你的守护链是:
systemd ➡️ pm2 ➡️ queue-worker
三层保护,稳得很! 
7)进阶:如果要多队列消费
假如你未来还想同时跑多个队列 worker:
module.exports = {apps: [{name: "queue-A-worker",script: "worker_a.py",interpreter: "python3",instances: "max",exec_mode: "fork",autorestart: true,max_restarts: 0,restart_delay: 5000,out_file: "./logs/queue_a_out.log",error_file: "./logs/queue_a_err.log",merge_logs: true,},{name: "queue-B-worker",script: "worker_b.py",interpreter: "python3",instances: 4,exec_mode: "fork",autorestart: true,max_restarts: 0,restart_delay: 5000,out_file: "./logs/queue_b_out.log",error_file: "./logs/queue_b_err.log",merge_logs: true,}]
}
 
这样一个 PM2就能管理多个队列 worker。
稳健生产版总结口诀
- 🟢 
instances: "max"➔ 吃满CPU,性能最大化 - 🟢 
max_restarts: 0➔ 无限重启,永远活着 - 🟢 
restart_delay: 5000➔ 挂了5秒后再拉起(防止崩溃风暴) - 🟢 
pm2-logrotate➔ 自动切割+压缩日志,硬盘安全 - 🟢 
pm2 save + startup➔ 开机自动拉起