博客 / 詳情

返回

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: 是否開啓自動重啓

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

  5. script:若使用cluster模式,必須是啓動文件入口,不可通過npm啓動
  6. max_restarts:指不穩定重啓,即小於1s或min_uptime的重啓,要結合min_uptime配置才起效
  7. 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 : 'git@github.com: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~ :)
轉發請註明參考文章地址,非常感謝!!!

user avatar peter-wilson 頭像 shaochuancs 頭像 sunhengzhe 頭像 lesini 頭像 niumingxin 頭像 qianduanlangzi_5881b7a7d77f0 頭像 lidalei 頭像 yiiouo 頭像 clearlove07 頭像 tempest_619c7f9d4e321 頭像 amsterdam_5caf807441f49 頭像 qingji_58b3c385d0028 頭像
25 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.