1. 程式人生 > >node守護工具-PM2使用

node守護工具-PM2使用

內部測試伺服器是最近新裝的,沒有supervisorctl 這個程式管理工具。不過前一陣得知node應該用更加適配的工具進行管理,那就PM2。試用了一下非常強大,特此記錄一下使用流程。非常使用用來做node 守護及相關管理。

文章目錄


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

1 安裝

npm install pm2 -g

全域性安裝pm2

您可以像這樣啟動任何應用程式(Node.js,Python,Ruby,$ PATH中的二進位制檔案…):

pm2 start app.js
pm2 start app.js --name app

簡單守護

整合守護使用,在生產環境總可能沒有安裝pm2 我們可以使用

RUN npm install pm2 -g
CMD [ "pm2-runtime", "npm", "--", "start" ]

2 基礎命令

2.1 檢視pm2 管理的應用

pm2 list

在這裡插入圖片描述

2.2 基礎命令(啟動 重啟 停止)

$ pm2 stop     <app_name|id|'all'|json_conf>
$ pm2 restart  <app_name|id|'all'|json_conf>
$ pm2 delete   <app_name|id|'all'|json_conf>

比如啟動express 可以在express根目錄下

pm2 start bin/www 

如果我們在後面加入watch引數,每當程式碼改變時即會自動重啟,如下:

sudo pm2 start bin/www --watch

2.3 檢視程序詳細資訊

pm2 describe <id|app_name>

該命令可以檢視工程執行目錄,node與你新高版本,日誌目錄,專案git位置等

要監控日誌,自定義指標,應用程式資訊:

pm2 monit

2.4 無縫重啟程式

 pm2 reload all

3 PM2叢集模式(負載均衡)

群集模式是啟動Node.js應用程式時的一種特殊模式,它啟動多個程序並在它們之間對HTTP / TCP / UDP進行負載均衡。**這提高了整體效能(16核機器上的x10倍)**和可靠性(在未處理錯誤的情況下更快的套接字重新平衡)。

以叢集模式啟動Node.js應用程式,該應用程式將利用所有可用的CPU:

pm2 start api.js -i <processes>

可以為’max’,-1(所有具有的cpu減1)或指定數量的例項開始。

如:sudo pm2 start bin/www -i max
在這裡插入圖片描述

監視從命令列直接啟動的所有程序:

 pm2 monit

4 配置檔案

配置檔案官方文件:http://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

4.1 配置檔案(環境變數)

the ecosystem file的目的是為所有應用程式收集所有選項和環境變數。

pm2 init 

在這裡插入圖片描述
//初始化一個環境配置,它會輸出一個config地址
您可以為多個環境宣告變數。每個環境金鑰必須具有以下格式:env_。
例如,app可以在兩個環境中啟動以下過程:development和production。

我們可以配置在不同環境下的特定引數,在express中 process.env.NODE_ENV即可傳遞進去

要app在特定環境中啟動它,請使用–env標誌:
在這裡插入圖片描述

4.2 參考配置

  apps : [{
    name: 'pm2 test',//app name 在pm2 管理中那個名字
    script: './bin/www', //啟動路徑
    instances: 1,//負載均衡例項數
    autorestart: true,//是否自動重啟
    watch: [  //通過監視功能需要監視的資料夾
	         "bin",
           "routers",
           "controllers"
	  ],
	  ignore_watch : [  //通過監視功能忽略某些檔案或資料夾名稱的正則表示式列表
		        "node_modules", 
		        "logs",
		        "public"
    ],
    watch_options: {
      "followSymlinks": false
    },
    max_memory_restart: '1G',
    output: './logs/pm2_out.log',//console.log 輸出位置
    error: './logs/pm2_error.log',//console.error 輸出位置
    log_date_format: "YYYY-MM-DD HH:mm Z",//log前面加上時間戳
    merge_logs: true,//多例項情況下合併log
    env: {//環境變數配置
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

4.3 使用

 pm2 start ecosystem.config.js 

//這裡我們使用配置檔案的方式代替 pm2 start 方式啟動

5 日誌管理

pm2 logs 檢視控制檯相應輸出(實時日誌)

5.1 日誌管理命令

$ pm2 logs APP-NAME        #  顯示APP-NAME日誌 
$ PM2 logs  --json          #  JSON輸出 
$ PM2 logs  --format        #  格式化輸出 
$ pm2 flush                #  重新整理所有日誌(清空)
$ pm2 reloadLogs           #  重新載入所有日誌 

5.2 日誌配置

5.2.1 配置log位置(通過環境配置)

您可以為日誌指定自定義位置。

module.exports = {
  apps: [{
      name: 'app',
      script: 'app.js',
      output: './out.log',
      error: './error.log',
	    log: './combined.outerr.log',
    }]
}
output 只是標準輸出(console.log)
error 只是錯誤輸出(console.error)
log結合output並error,預設情況下禁用

5.2 拆分過載日誌

pm2 install pm2-logrotate

5.3 合併日誌

在群集模式下,每個群集都有自己的日誌檔案。您可以使用合併選項將所有日誌收集到單個檔案中:

module.exports = {
  apps: [{
      name: 'app',
      script: 'app.js',
      output: './out.log',
      error: './error.log',
      merge_logs: true,
	log_date_format: "DD-MM-YYYY"
    }]
}

6 開機自啟動

解決最近核心矛盾

1 儲存當前管理應用程式狀態

pm2 save

2 生成自啟動指令碼

pm2 startup

pm2 startup ubuntu //你的作業系統
要獲取計算機的自動配置啟動指令碼
此命令的輸出可以是複製/貼上行的建議,其中包含為您配置的所有環境變數和選項。
3 您只需複製/貼上 PM2為您提供的行,併為您的作業系統配置啟動指令碼即可。
4 禁用自啟動
pm2 unstartup
您只需複製/貼上 PM2為您提供的行,併為您的作業系統配置啟動指令碼即可。

7 遠端部署

http://pm2.keymetrics.io/docs/usage/deployment/#simple-deploy

8 參考連結

https://www.cnblogs.com/chyingp/p/pm2-documentation.html
官方文件:
https://www.npmjs.com/package/pm2
https://pm2.io/doc/en/runtime/guide/process-management/?utm_source=github