生产部署方案pm2配合python3脚本

前言

使用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 ➔ 开机自动拉起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python全流程开发实战:基于IMAP协议安全下载个人Gmail邮箱内所有PDF附件

文章目录 一、需求分析与安全前置:为什么需要专用工具?1.1 痛点场景1.2 技术方案选择 二、准备工作:Gmail账号安全配置与环境搭建2.1 开启两步验证(必做!)2.2 创建应用专用密码(替代普通密码&am…

巧用python之--模仿PLC(PLC模拟器)

工作中用到了VM(VisionMaster4.3)有时候需要和PLC打交道,但是PLC毕竟是别人的,不方便修改别人的程序,这时候需要一个灵活的PLC模拟器是多么好呀! 先说背景: PLC型号 汇川Easy521: Modbus TCP 192.168.1.10:502 在汇川Easy521中Modbus保持寄存器D寄存器 ,在modbus协议中 0-4区…

docker构建镜像并上传dockerhub

docker构建镜像并上传dockerhub 前提条件:需要连接梯子 将梯子配置到虚拟机中(确保主机能够连接 hub.docker.com) 使用ipconfig 查询主机的 ip4地址虚拟机的连接模式改成桥接模式(复制主机的地址网络)将ip4配置到虚拟…

python实现的音乐播放器

python实现的音乐播放器 音乐播放器,原来写过一个简陋的例子,可见 https://blog.csdn.net/cnds123/article/details/137874107 那个不能拖动播放进度条上的滑块到新的位置播放。下面介绍的可以拖动播放进度条上的滑块到新的位置播放。 简单实用的音乐播放器 这个简单实用的…

[网安工具] 端口信息收集工具 —— 御剑高速 TCP 全端口扫描工具 · 使用手册

🌟想了解其它网安工具?看看这个:[网安工具] 网络安全工具管理 —— 工具仓库 管理手册 https://github.com/NepoloHebo/Yujian-high-speed-TCP-full-port-scannerhttps://github.com/NepoloHebo/Yujian-high-speed-TCP-full-port-scanner 0…

数字孪生赋能智慧城市:从概念到落地的深度实践

在城市规模与复杂度持续攀升的当下,传统管理模式已难以满足现代城市精细化治理需求。数字孪生技术凭借构建虚拟城市镜像、实现实时数据交互与智能决策的特性,成为智慧城市建设的核心引擎。本文将通过多个典型案例,深度解析数字孪生技术如何重…

DeFi开发系统软件开发:技术架构与生态重构

DeFi开发系统软件开发:技术架构与生态重构 ——2025年去中心化金融开发的范式革新与实践指南 一、技术架构演进:从单一链到多链混合引擎 现代DeFi系统开发已从单一公链架构转向“跨链互操作混合模式”,结合中心化效率与去中心化安全双重优势…

相同IP和端口的服务器ssh连接时出现异常

起因 把服务器上的一个虚拟机搞坏了,所以删除重新创建了一个,端口号和IP与之前的虚拟机相同。 ssh usernameIP -p port 时报错 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone…

验证es启动成功

1. 查看命令行输出信息 在启动 Elasticsearch 时,命令行窗口会输出一系列日志信息。若启动成功,日志里通常会有类似下面的信息: plaintext [2025-05-06T13:20:00,000][INFO ][o.e.n.Node ] [node_name] started其中 [node_na…

CentOS网络之network和NetworkManager深度解析

文章目录 CentOS网络之network和NetworkManager深度解析1. CentOS网络服务发展历史1.1 传统network阶段(CentOS 5-6)1.2 过渡期(CentOS 7)1.3 新时代(CentOS 8) 2. network和NetworkManager的核心区别3. ne…

Unity:父挂 Rigidbody2D、子挂 Collider2D 时触发器不生效的问题分析

目录 ❓问题现象 🔍 排查与定位 ⚠️ Unity 触发机制的核心要求 ✅ 为什么把 Collider2D 移到父物体后就能触发? 💡 解决方案 在 Unity 2D 游戏开发中,很多人习惯用父物体挂载 Rigidbody2D,而将不同的身体部位&am…

Google AI版图:解析AI Studio, Gemini, NotebookLM与GCP

1. 2C vs 2B: AI Studio: 主要是面向开发者,提供一个易用的界面来探索和构建基于Google模型的应用。虽然最终的应用可能服务于C端或B端,但AI Studio本身更多是一个开发者的工具平台,可以看作是连接模型能力和各种应用的桥梁。它可以被个人开…

Oracle EBS AP发票被预付款核算创建会计科目时间超长

背景 由于客户职能部门的水电、通信和物业等等费用统一管理或对接部门报销费,在报销费的时候,用户把所有费用分摊到各个末级部门,形成AP发票行有上千行, 问题症状 1、用户过账时,请求创建会计科目一直执行20多个小时未完成,只能手工强行取消请求。 2、取消请求以后,从后…

MySQL中MVCC指什么?

简要回答: MVCC(multi version concurrency control)即多版本并发控制,为了确保多线程下数据的安全,可以通过undo log和ReadView来实现不同的事务隔离级别。 对于已提交读和可重复读隔离级别的事务来说,M…

赛季7靶场 -- Checker --User flag

本系列仅说明靶场的攻击思路,不会给出任何的详细代码执行步骤,因为个人觉得找到合适的工具以实现攻击思路的能力也非常重要。root要逆向,没做了,但是user flag也有借鉴意义,关于2FA的绕过我们有必要了解 1.首先Nmap扫描…

【RAG技术全景解读】从原理到工业级应用实践

目录 🌟 前言🏗️ 技术背景与价值🚨 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🔍 一、技术原理剖析📐 核心概念图解💡 核心作用讲解⚙️ 关键技术模块说明⚖️ 技术选型对比 &…

【嵌入式开发-RS-485】

嵌入式开发-RS-485 ■ RS-485 连接方式■ RS-485 半双工通讯■ RS-485 的特点■ UART硬流控■ RS-4851. 全双工、半双工接线2. 拓扑结构3. RS-485收发器3.1 发送模式(TX)3.2 接收模式(RX) 4. RS-485数据链路5. RS-485常用电路6. C…

[硬件电路-18]:MCU - LPC1765FBD100是恩智浦(NXP)半导体推出的一款基于ARM Cortex-M3内核的高性能32位微控制器

LPC1765FBD100是恩智浦(NXP)半导体推出的一款基于ARM Cortex-M3内核的高性能32位微控制器,具备高集成度、低功耗、丰富的外设接口和强大的处理能力,适用于工业控制、消费电子、医疗设备、通信系统等嵌入式应用场景。 以下从核心特…

MyBatis(进阶)(xml标签)

本节⽬标 1. 学习MyBatis的动态SQL查询 2. 掌握MyBatis在项⽬中的应⽤, 可以使⽤Spring MVC完成⼀些基础的功能 1. 动态SQL(XML) 动态 SQL 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接 可以参考官⽅⽂档: M…

QT QList容器及行高亮

总结QList是一个泛型/模板链表,可以自己定义数据类型,ExtraSelection是一种“数据类型”