- 項目背景:由於某些功能簡單的腳本文件並不需要寫圖形化界面;或者沒有時間或精力開發和維護圖形化界面(但是這些腳本代碼又需要在後台運行,就比如在windows直接運行代碼需要cmd前台窗口界面或者vscode啓動;關掉前台窗口就無法後台運行代碼;不關閉前台窗口程序又佔用大量內存)所以這使得 PM2 成為一個既高效又易於管理的解決方案。
- 簡單介紹:PM2基於nodejs,但是它又可以管理其他類型的代碼腳本。並且PM2可以多平台使用
-
參考資料:
- PM2文檔
- 用 PM2 做 Python 進程管理也太好用了吧
- pm2 進程守護python flask
- PM2實用指南、PM2詳解、PM2輕鬆實現腳本後台執行、Node如何在後台運行、如何讓npm start 在後台運行
- PM2中文教程
- windows設置pm2開機服務自啓動nodejs項目
1.PM2的安裝
PM2依賴於nodejs,所以我們首先來安裝nodejs。由於我的運行平台是windows,所以直接打開官網下載.msi格式安裝包。下載之後直接安裝即可(記得選擇想要的版本和X64)
安裝之後,打開終端輸入以下命令檢查安裝情況是否正常,如果能輸出版本號,説明 Node.js 和 npm 安裝正常
node -v
npm -v
接着終端運行以下命令將 PM2 安裝到全局:
npm install -g pm2
安裝之後,打開終端輸入以下命令檢查安裝情況是否正常,如果能輸出版本號,説明 PM2 安裝正常
pm2 -v
2.PM2的創建應用操作和常規使用例子
先來介紹一下PM2的創建應用操作(以及相關參數):
# 給這個任務起名
--name {job_name} 或者 -n {job_name}
# 文件更新時自動重啓任務
--watch
# 開啓多進程
-i {num}
# 設置應用重新加載的內存閾值
--max-memory-restart <200MB>
# 定義日誌路徑
--log {log_path}
# 腳本額外參數
-- arg1 arg2 arg3
# 默認情況PM2自動重啓應用。該命令禁用自動重啓功能,即使應用因為崩潰或錯誤退出
--no-autorestart
# 設置cron定時任務
--cron {定時表達式}
上面的應用啓動操作具體怎麼寫取決於你的使用場景,拿我的使用來舉個例子:比如使用PM2啓動一個flask代碼,並將其命名為 flask_app
pm2 start "C:\Users\QINXIN\AppData\Local\Programs\Python\Python310\pythonw.exe" --name "flask_app" -- "C:\02-文檔\python學習\my_toys\18_錄音轉文本\flask.py" --no-autorestart
- "C:\Users\QINXIN\AppData\Local\Programs\Python\Python310\pythonw.exe"是解釋器的具體路徑,由於我這裏需要python flask代碼無窗口運行,所以需要指定使用pythonw.exe來當解釋器而非使用python.exe,否則會彈出前台窗口(關閉前台窗口則flask無法運行)
- --name "flask_app" 是給你的應用命名,方便管理。注意不要寫中文,否則後續進程會出錯
- -- "C:\02-文檔\python學習\my_toys\18_錄音轉文本\flask.py" 是代碼路徑,可以指定具體的路徑,注意:--後面帶有空格,再接代碼路徑!!
- --no-autorestart 是禁用自動重啓功能,即使應用因為崩潰或錯誤退出。
3.PM2的常用命令
前面提到的PM2的應用啓動操作只是PM2命令的一個,其他常用命令還有:
-
檢查 PM2 運行狀態
pm2 list終端會進行以下輸出,顯示你創建的各種應用:
┌───────┬────────────┬──────┬─────┬──────────┬───────┬────────┐ │ Name │ id │ mode │ pid │ status │ cpu │ mem │ ├───────┼────────────┼──────┼─────┼──────────┼───────┼────────┤ │ flask │ 0 │ fork │ 1234│ online │ 0.1% │ 20MB │ └───────┴────────────┴──────┴─────┴──────────┴───────┴────────┘ -
停止應用
pm2 stop 應用名 pm2 stop [id] pm2 stop all -
重啓應用
pm2 restart 應用名 pm2 restart [id] pm2 restart all -
刪除應用
pm2 delete 應用名 pm2 delete [id] pm2 delete all -
查看應用日誌
pm2 logs -
確保 PM2 在系統重啓後自動啓動
pm2 startup -
持久化你的進程列表,重啓後自動恢復進程,默認情況下,PM2 在重啓或者服務器關閉時,不會自動恢復你之前運行的進程。pm2 save 命令會將當前運行的進程列表和它們的配置信息保存到一個 dump 文件(通常是 ~/.pm2/dump.pm2)
pm2 save -
恢復之前通過 pm2 save 命令保存的進程列表(通過 pm2 save 命令)如果你在系統重啓後需要手動恢復所有進程,可以使用它。就像一個快照,記錄了你當前運行的所有應用以及它們的配置,下次啓動時直接恢復到這個快照狀態。
pm2 resurrect
4.PM2 在windows上開機自啓動服務
以前往往使用pm2-windows-service這種模塊,但我看了一下這個庫已經很久不維護並且試過不太成功。所以推薦以下方法
使用"任務計劃程序"調用批處理文件 (.bat) 或 PowerShell 腳本 (.ps1),背後的流程原理是:當你windows開機之後,nodejs被自啓動,然後任務計劃程序被設置在nodejs啓動之後的一段時間內調用cmd或powershell發送pm2 resurrect命令,恢復之前通過pm2 save命令保存的進程列表
- 也就是説首先你要確保nodejs是能夠自啓動的,並且pm2命令已經正確地添加到了系統環境變量中
- 接着執行pm2 startup命令開啓自啓動,然後執行pm2 save保存一份快照以便下次啓動時自動恢復進程
-
然後創建pm2_resurrect.bat的文件,內容如下,自己保存到合適位置
@echo off pm2 resurrect exit - 打開 "任務計劃程序",創建新任務,觸發器設置為 "計算機啓動時"。操作中選擇 "啓動程序","程序/腳本" 瀏覽到您的 pm2_resurrect.bat 文件。在任務屬性的 "常規" 選項卡中,勾選 "使用最高權限運行"。