原始社會的咱們開發node服務端程序通常過程:前端
node app.js
;或者寫入script使用npm運行;打開瀏覽器訪問;node app.js
->再次運行;node app.js
->再次運行;node app.js
->再次運行;nodemon
;安裝使用nodemon app.js
;哇,能夠自動監聽文件修改變化自動重啓,可是關閉控制檯服務仍是會被摧毀。再來看看使用pm2可擁有的能力:node
啓動服務pm2 start <script_file|config_file> [options] 啓動指定應用
git
pm2 start app.js //啓動app.js應用 pm2 start app.js --name app //啓動應用並設置name pm2 start app.sh //腳本啓動 pm2 start app.js --watch //監聽模式啓動,當文件發生變化,自動重啓 //max 表示PM2將自動檢測可用CPU的數量並運行儘量多的進程 //max能夠自定義,若是是4核CPU,設置爲2則佔用2個 pm2 start app.js -i max //啓用羣集模式(自動負載均衡) pm2-dev start ... // 開發模式啓動,即不啓用後臺運行
pm2 list
顯示應用程序詳細信息pm2 show <appName> [options] 顯示指定應用詳情
github
pm2 show [Name] //根據name查看 pm2 show [ID] //根據id查看
中止指定應用pm2 stop <appName> [options] 中止指定應用
shell
pm2 stop all //中止全部應用 pm2 stop [AppName] //根據應用名中止指定應用 pm2 stop [ID] //根據應用id中止指定應用
重啓應用pm2 reload|restart <appName> [options] 重啓指定應用
npm
pm2 restart app.js //同時殺死並重啓全部進程,短期內服務不可用,生成環境慎用 pm2 reload app.js //從新啓動全部進程,0秒重啓,始終保持至少一個進程在運行 pm2 gracefulReload all //以羣集模式從新加載全部應用程序
pm2 serve ./dist 8080
將目錄dist做爲靜態服務器根目錄,端口爲8080刪除應用pm2 delete <appName> [options] 刪除指定應用
;若是修改了應用配置行爲,須要先刪除應用,從新啓動後方纔會生效,如修改腳本入口文件;json
pm2 delete all //關閉並刪除應用 pm2 delete [AppName] //根據應用名關閉並刪除應用 pm2 delete [ID] //根據應用ID關閉並刪除應用
pm2 kill
殺掉pm2管理的全部進程;pm2 logs <appName>
查看指定應用的日誌,即標準輸出和標準錯誤segmentfault
pm2 logs //查看全部應用日誌 pm2 logs [Name] //根據指定應用名查看應用日誌 pm2 logs [ID] //根據指定應用ID查看應用日誌
pm2 monit
監控各個應用進程cpu和memory使用狀況;命令生產默認示例配置文件pm2 ecosystem
或pm2 init
,運行默認會生成ecosystem.config.js
配置文件api
module.exports = { apps: [ { name: 'back-Api', //應用名 script: './server/start.js', //應用文件位置 env: { PM2_SERVE_PATH: "./apidoc", //靜態服務路徑 PM2_SERVE_PORT: 8080, //靜態服務器訪問端口 NODE_ENV: 'development' //啓動默認模式 }, env_production : { NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production }, instances:"max", //將應用程序分佈在全部CPU核心上,能夠是整數或負數 instance_var: "INSTANCE_ID", exec_mode: "cluster", watch:[ "server", ], //監聽模式,不能單純的設置爲true,易致使無限重啓,由於日誌文件在變化,須要排除對其的監聽 merge_logs: true, //集羣狀況下,能夠合併日誌 } ], 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' //部署後的動做 } } };
processes.json
;啓動pm2 start processes.json
{ "apps": [{ "name": "app", //名稱 "script": "./", //程序入口 "cwd": "./", //根目錄 "watch":[ "views" ],//須要監控的目錄 "error_file":"./logs/err.log",//錯誤輸出日誌 "out_file":"./logs/out.log", //日誌 "log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式 }] }
1. apps:json結構,apps是一個數組,每個數組成員就是對應一個pm2中運行的應用 2. name:應用程序名稱"app" 3. cwd:應用程序所在的目錄"./" 4. script:應用程序的腳本路徑"./" 5. log_date_format: 日誌文件名輸出日期格式"YYYY-MM-DD HH:mm Z" 6. error_file:自定義應用程序的錯誤日誌文件"./logs/app-err.log", 7. out_file:自定義應用程序日誌文件"./logs/app-out.log" 8. instances: 應用啓動實例個數,僅在cluster模式有效 默認爲fork;或者 max 9. min_uptime:最小運行時間,這裏設置的是60s即若是應用程序在60s內退出,pm2會認爲程序異常退出,此時觸發重啓max_restarts設置數量 10. max_restarts:設置應用程序異常退出重啓的次數,默認15次(從0開始計數) 11. cron_restart:定時啓動,解決重啓能解決的問題 12. watch:是否啓用監控模式,默認是false。若是設置成true,當應用程序變更時,pm2會自動重載。這裏也能夠設置你要監控的文件。 13. "ignore_watch": [ // 不用監聽的文件 "node_modules", "logs" ], 13. merge_logs:// 設置追加日誌而不是新建日誌 14. exec_interpreter:應用程序的腳本類型,這裏使用的shell,默認是nodejs 15. exec_mode:應用程序啓動模式,這裏設置的是cluster_mode(集羣),默認是fork 16. autorestart:啓用/禁用應用程序崩潰或退出時自動重啓,默認爲true, 發生異常的狀況下自動重啓 17. vizion:啓用/禁用vizion特性(版本控制) 18. "args": "", // 傳遞給腳本的參數 19. env: { PM2_SERVE_PATH: "./apidoc", //靜態服務路徑 PM2_SERVE_PORT: 8080, //靜態服務器訪問端口 NODE_ENV: 'development' //啓動默認模式 }, 20. env_production : { NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production },
pm2-intercom
進程間通訊模塊在log4js的配置文件logger.js
裏添加以下命令:數組
pm2: true, pm2InstanceVar: 'INSTANCE_ID'
"instance_var": "INSTANCE_ID", // 添加這一行
字段"exec_mode": "cluster"
,也會記錄不到;「積跬步、行千里」—— 持續更新中~,喜歡的話留下個贊和關注哦!
往期經典好文: