前情提要
pm2可以通過json文件部署單個node服務,也可部署多個node服務集羣
"instances": 4,即可以,但是部署的node service4個節點使用的是一個端口實現的是高可用和分佈式計算功能。
但是如果想實現每個節點都擁有獨立的端口則不可這麼書寫。
我們可以預定義一個配置文件,然後制定運行這個配置文件,比如我們定義一個文件app.json,內容如下:
[root@jenkins-master linux]# cat app.json
{
"apps":[
{
"name": "sourcepath_Jenvironment",
"cwd": "/data/source/sourcepath_Jenvironment/publish/",
"script": "/data/source/sourcepath_Jenvironment/publish/service/server.js",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/data/pm2-log/errlogs/sourcepath_Jenvironment-err.log",
"out_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment-out.log",
"pid_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment.pid",
"instances": 1,
"max_restarts": 50,
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
}
]
}
apps:json結構,apps是一個數組,每一個數組成員就是對應一個pm2中運行的應用
name:應用程序名稱
cwd:應用程序所在的目錄
script:應用程序的腳本路徑
log_date_format:
error_file:自定義應用程序的錯誤日誌文件
out_file:自定義應用程序日誌文件
pid_file:自定義應用程序的pid文件
instances:
min_uptime:最小運行時間,這裏設置的是60s即如果應用程序在60s內退出,pm2會認爲程序異常退出,此時觸發重啓max_restarts設置數量
max_restarts:設置應用程序異常退出重啓的次數,默認15次(從0開始計數)
cron_restart:定時啓動,解決重啓能解決的問題
watch:是否啓用監控模式,默認是false。如果設置成true,當應用程序變動時,pm2會自動重載。這裏也可以設置你要監控的文件。
merge_logs:
exec_interpreter:應用程序的腳本類型,這裏使用的shell,默認是nodejs
exec_mode:應用程序啓動模式,這裏設置的是cluster_mode(集羣),默認是fork
autorestart:啓用/禁用應用程序崩潰或退出時自動重啓
vizion:啓用/禁用vizion特性(版本控制)
**args:執行腳本文件的參數域**
{
"apps":[
{
"name": "sourcepath_Jenvironment",
"cwd": "/data/source/sourcepath_Jenvironment/publish/",
"script": "/data/source/sourcepath_Jenvironment/publish/service/server.js",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/data/pm2-log/errlogs/sourcepath_Jenvironment-err.log",
"out_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment-out.log",
"pid_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment.pid",
"instances": 1,
"max_restarts": 50,
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
}, {
"name": "sourcepath_Jenvironment2",
"cwd": "/data/source/sourcepath_Jenvironment/publish/",
"script": "/data/source/sourcepath_Jenvironment/publish/service/server.js",
"args": "'debug' '12345'",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/data/pm2-log/errlogs/sourcepath_Jenvironment2-err.log",
"out_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment2-out.log",
"pid_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment2.pid",
"instances": 1,
"max_restarts": 50,
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
}, {
"name": "sourcepath_Jenvironment3",
"cwd": "/data/source/sourcepath_Jenvironment/publish/",
"script": "/data/source/sourcepath_Jenvironment/publish/service/server.js",
"args": "'debug' '12344'",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/data/pm2-log/errlogs/sourcepath_Jenvironment3-err.log",
"out_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment3-out.log",
"pid_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment3.pid",
"instances": 1,
"max_restarts": 50,
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
}, {
"name": "sourcepath_Jenvironment4",
"cwd": "/data/source/sourcepath_Jenvironment/publish/",
"script": "/data/source/sourcepath_Jenvironment/publish/service/server.js",
"args": "'debug' '12343'",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/data/pm2-log/errlogs/sourcepath_Jenvironment4-err.log",
"out_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment4-out.log",
"pid_file": "/data/pm2-log/outlogs/sourcepath_Jenvironment4.pid",
"instances": 1,
"max_restarts": 50,
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
}
]
}
"args": "'debug' '12344'" args:執行腳本文件的參數域,如果不寫的話會按照原來單個node service的方式調用config.js文件裏面的配置。