pm2 常用命令

来源:https://www.cnblogs.com/fx67ll/archive/2022/04/28/pm2-shell.html
-Advertisement-
Play Games

先說一些廢話 之前學習Nodejs項目的時候使用了pm2作為生產環境的進程管理工具,最近伺服器崩了需要重啟一些服務,發現有些命令記得不是特別清楚, 所以這裡寫一篇文章幫助自己記憶整理一下pm2的常用命令,後續有需要查閱一下即可~ 常用命令 進入bin目錄啟動:pm2 start www / pm2 ...


先說一些廢話

之前學習Nodejs項目的時候使用了pm2作為生產環境的進程管理工具,最近伺服器崩了需要重啟一些服務,發現有些命令記得不是特別清楚,
所以這裡寫一篇文章幫助自己記憶整理一下pm2的常用命令,後續有需要查閱一下即可~

常用命令

  1. 進入bin目錄啟動:pm2 start www / pm2 start app.js
  2. pm2 start app.js --name="fx67ll" 啟動並命名為fx67ll,沒有命名的話後續可以用id替代name
  3. pm2 start app.js --watch 當文件變化時自動重啟應用
  4. pm2 start script.sh 啟動bash腳本
  5. pm2 list 查看所有啟動的應用列表
  6. pm2 monit 顯示每個應用程式的CPU和記憶體占用情況
  7. pm2 show [app-id/app-name] 顯示指定應用程式的所有信息
  8. pm2 log 顯示應用程式的日誌信息
  9. pm2 log [app-id/app-name] 顯示指定應用程式的日誌信息
  10. pm2 flush 清空所有日誌文件
  11. pm2 stop all 停止所有應用程式
  12. pm2 stop [app-id/app-name] 停止指定應用程式
  13. pm2 restart all 重啟所有應用程式
  14. pm2 restart [app-id/app-name] 重啟指定應用程式
  15. pm2 delete all 關閉並刪除所有應用程式
  16. pm2 delete [app-id/app-name] 刪除指定的應用程式
  17. pm2 reset [app-id/app-name] 重置重啟數量
  18. pm2 startup 創建開機自啟動命令
  19. pm2 save 保存當前應用列表
  20. pm2 resurrect 重新載入保存的應用列表
  21. pm2 update 保存進程,殺死並重啟進程,一般用於更新pm2版本
  22. pm2 ecosystem 生成一個示例json配置文件
  23. 更多命令可以參考pm2官方文檔

使用均衡負載模式(cluster mode)的相關命令

  1. pm2 start app.js -i n 均衡負載模式(cluster mode)啟動n個app.js應用實例
  2. pm2 reload all 重啟均衡負載模式(cluster mode)下的所有應用
  3. pm2 gracefulReload all Graceful reload all apps in cluster mode
  4. pm2 scale [app-id/app-name] 10 將指定的應用程式拓展到10個實例

0秒停機重新載入(集群模式下,可以達到重啟時不停止服務)

  1. pm2 reload app.js 重新啟動所有進程,始終保持至少一個進程在運行
  2. pm2 gracefulReload all 優雅地以集群模式重新載入所有應用程式

pm2配置文件

生成示例配置文件

// 生成一個示例json配置文件
pm2 ecosystem
// pm2初始化
pm2 init

配置項

  1. 基礎類
    • name:進程名
    • script:node啟動文件的路徑
    • cwd :項目所在的目錄
    • args :通過命令行傳遞給node啟動文件的參數
    • interpreter :編譯器的絕對路徑(預設node)
    • interpreter_args :傳給編譯器的參數
    • node_args:傳給node的參數
  2. 進階類
    • instances :進程數
    • exec_mode :進程的模式(cluster或fork)
    • PS: cluster模式利用node的child_process模塊孵化多個子進程,主進程監聽埠,子進程只和主進程通信,從而達到單個埠多個進程;通過輪轉方式實現負載均衡
    • watch :布爾值或文件數組,允許開啟監聽文件改動重啟
    • ignore_watch :不監聽的文件
    • max_memory_restart :超過該記憶體就自動重啟
    • env :應用中的預設環境變數
    • env_ :命令行中可傳入的環境變數,覆蓋預設環境變數
    • source_map_support :預設true,支持sourcemap文件
  3. 日誌類
    • log_date_format :日誌時間格式
    • error_file :錯誤日誌存放路徑
    • out_file :全部日誌存放路徑
    • combine_logs:是否將不同id的進程日誌合併
    • merge_logs:同上
  4. 控制流
    • min_uptime :pm2認為進程線上的最小時長
    • listen_timeout :如果app沒有發送ready信號,間隔多長時間reload
    • kill_timeout :從告訴進程要關閉到強制關閉進程的間隔時間
    • wait_ready:是否等待進程發送ready信號
    • max_restarts :最大不穩定重啟次數(不穩定指的是小於1s或者小於的min_uptime重啟)
    • restart_delay:進程掉線後,等待多長時間重啟
    • autorestart: 是否開啟自動重啟

配置項實踐中需要註意的內容

  1. script:若使用cluster模式,必須是啟動文件入口,不可通過npm啟動
  2. max_restarts:指不穩定重啟,即小於1s或min_uptime的重啟,要結合min_uptime配置才起效
  3. listen_timeout:當cluster模式時,這個值要大於一個進程啟動所需時間,否則reload時會造成短暫的服務不可用

配置文件示例

module.exports = {
    apps : [{
        name      : 'API',      //應用名
        script    : 'app.js',   //應用文件位置
        env: {
            PM2_SERVE_PATH: ".",    //靜態服務路徑
            PM2_SERVE_PORT: 8080,   //靜態伺服器訪問埠
            NODE_ENV: 'development' //啟動預設模式
        },
        env_production : {
            NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production
        },
        instances:"max",          //將應用程式分佈在所有CPU核心上,可以是整數或負數
        watch:true,               //監聽模式
        output: './out.log',      //指定日誌標準輸出文件及位置
        error: './error.log',     //錯誤輸出日誌文件及位置,pm2 install pm2-logrotate進行日誌文件拆分
        merge_logs: true,         //集群情況下,可以合併日誌
        log_type:"json",          //日誌類型
        log_date_format: "DD-MM-YYYY",  //日誌日期記錄格式
    }],
    deploy : {
        production : {
            user : 'node',                      //ssh 用戶
            host : '212.83.163.1',              //ssh 地址
            ref  : 'origin/master',             //GIT遠程/分支
            repo : '[email protected]:repo.git',   //git地址
            path : '/var/www/production',       //伺服器文件路徑
            post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'  //部署後的動作
        }
    }
};

配置啟動命令(package.json)

# pm2-server工程的環境變數,目的是區分各個環境的應用啟動路徑
# cross-env NODE_ENV=development

# pm2的啟動命令
# pm2 start pm2-conf/ecosystem.config.js

# 傳遞給pm2的參數,-- only  <name>,--env <env name>
# --only  detective  --env test

cross-env NODE_ENV=development   pm2 start pm2-conf/ecosystem.config.js   --only  detective  --env test

關於pm2

pm2是什麼

pm2(Process Manager 2)是具有內置負載均衡器的Node.js應用程式的生產運行時和進程管理器。
它允許您永久保持應用程式活躍,無需停機即可重新載入它們,並促進常見的Devops任務。

pm2特性

  1. 後臺運行:普通啟動方式:node index.js關閉終端就結束進程,pm2可以後臺運行,終端關閉不影響
  2. 日誌管理:應用程式日誌保存在伺服器的硬碟中~/.pm2/logs/
  3. 負載均衡:pm2可以通過創建共用同一伺服器埠的多個子進程來擴展您的應用程式,這樣做還允許您以零秒停機時間重新啟動應用程式
  4. 終端監控:提供實時的介面,可以在終端中監控您的應用程式並檢查應用程式運行狀況(CPU使用率,使用的記憶體,請求/分鐘等)
  5. SSH部署:自動部署,避免逐個在所有伺服器中進行ssh
  6. 靜態服務:支持靜態伺服器功能
  7. 多平臺支持:適用於Linux(穩定)和macOS(穩定)和Windows(穩定)
  8. 集成管理:對於多個進程,不同環境,可以統一配置,方便管理

pm2安裝

使用npm命令npm install pm2即可,配置項參考npm的方式

附錄

參考資料

  1. 參考教程 ———— pm2 官方教程
  2. 參考文檔 ———— PM2 常用命令
  3. 參考文檔 ———— pm2介紹及使用手冊
  4. 參考文檔 ———— pm2入坑詳解

我是 fx67ll.com,如果您發現本文有什麼錯誤,歡迎在評論區討論指正,感謝您的閱讀!
如果您喜歡這篇文章,歡迎訪問我的 本文github倉庫地址,為我點一顆Star,Thanks~

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本次要講的內容是利用RecyclerView顯示Users列表的信息,如下圖所示。 首先我們來創建模型User.java package com.example.mytest.User; import java.util.UUID; public class User{ private UUID m ...
  • 為增強ArkUI開發框架的圖像處理能力,ImageKnife組件應運而生。本期我們將為大家帶來ImageKnife的介紹。 ...
  • 今天差不多從中午開始下午一點才開始學的,把git學了一大半了,還好任務不是很多,但是我上午用的時間挺值的,因為我去搞了個cnblogs的背景主題,就是你們現在所看到的這套,這個沒搞明白有一通研究的,只不過現在已經搞熟悉了,添加那些參數,不得不說挺強大的,這個自己編輯頁面的功能,我最滿意的這套主題,是 ...
  • 大家好,我是半夏👴,一個剛剛開始寫文的沙雕程式員.如果喜歡我的文章,可以關註➕ 點贊 👍 加我微信:frontendpicker,一起學習交流前端,成為更優秀的工程師~關註公眾號:搞前端的半夏,瞭解更多前端知識! 點我探索新世界! 原文鏈接 ==>http://sylblog.xin/archi ...
  • 前言 記錄一下學習html,初識前端,記錄一些html的常用標簽,雖然簡單,但會經常用到。 <h1> 標題標簽</h1> 標題標簽 <p>段落標簽</p> 段落標簽 換行標簽</br> 換行標簽 水平線標簽</hr> 特殊符號 &nbsp; &lt; &gt; &amp; &yen; &copy; ...
  • 567網頁的組成: html:超文本標記語言,網頁結構層. CSS:層疊樣式表,網頁的樣式. Javascript:腳本語言,規定了網頁交互行為. 什麼是JS? JS是基於對象和事件驅動的解釋型腳本語言. JS特點: 基於對象:JS中萬物皆對象.JS中的任何內容都由一個對象來描述.任何操作都是由對象 ...
  • 想必大家在做網頁表格的時候一定遇到過這種情況吧 表格出現了“雙線”,但是我們需要一個“單線”的表格 比較常用的解決方案 解決方案1: 在表格的樣式中添加border-collapse: collapse;以設置邊框合併(如果border-collapse的屬性值為collapse,則會忽略 bord ...
  • 一 、通過雲開發平臺快速創建初始化應用 1.創建相關應用模版請參考鏈接: Hexo博客框架—輕量、一令部署 2.完成創建後就可以在github中查看到新增的Hexo倉庫 二 、 本地編寫《賽博朋克風格》個人博客 1.將應用模版克隆到本地 ● 首先假定你已經安裝了Git、node,沒有安裝請移步nod ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...