生產部署方案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.pswp.cn/bicheng/80246.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80246.shtml
英文地址,請注明出處:http://en.pswp.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是一種“數據類型”