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