先說一些廢話
之前學習Nodejs專案的時候使用了pm2作為生產環境的行程管理工具,最近服務器崩了需要重啟一些服務,發現有些命令記得不是特別清楚,
所以這里寫一篇文章幫助自己記憶整理一下pm2的常用命令,后續有需要查閱一下即可~
常用命令
- 進入bin目錄啟動:
pm2 start www/pm2 start app.js pm2 start app.js --name="fx67ll"啟動并命名為fx67ll,沒有命名的話后續可以用id替代namepm2 start app.js --watch當檔案變化時自動重啟應用pm2 start script.sh啟動bash腳本pm2 list查看所有啟動的應用串列pm2 monit顯示每個應用程式的CPU和記憶體占用情況pm2 show [app-id/app-name]顯示指定應用程式的所有資訊pm2 log顯示應用程式的日志資訊pm2 log [app-id/app-name]顯示指定應用程式的日志資訊pm2 flush清空所有日志檔案pm2 stop all停止所有應用程式pm2 stop [app-id/app-name]停止指定應用程式pm2 restart all重啟所有應用程式pm2 restart [app-id/app-name]重啟指定應用程式pm2 delete all關閉并洗掉所有應用程式pm2 delete [app-id/app-name]洗掉指定的應用程式pm2 reset [app-id/app-name]重置重啟數量pm2 startup創建開機自啟動命令pm2 save保存當前應用串列pm2 resurrect重新加載保存的應用串列pm2 update保存行程,殺死并重啟行程,一般用于更新pm2版本pm2 ecosystem生成一個示例json組態檔- 更多命令可以參考pm2官方檔案
使用均衡負載模式(cluster mode)的相關命令
pm2 start app.js -i n均衡負載模式(cluster mode)啟動n個app.js應用實體pm2 reload all重啟均衡負載模式(cluster mode)下的所有應用pm2 gracefulReload allGraceful reload all apps in cluster modepm2 scale [app-id/app-name] 10將指定的應用程式拓展到10個實體
0秒停機重新加載(集群模式下,可以達到重啟時不停止服務)
pm2 reload app.js重新啟動所有行程,始終保持至少一個行程在運行pm2 gracefulReload all優雅地以集群模式重新加載所有應用程式
pm2組態檔
生成示例組態檔
// 生成一個示例json組態檔
pm2 ecosystem
// pm2初始化
pm2 init
配置項
- 基礎類
name:行程名script:node啟動檔案的路徑cwd:專案所在的目錄args:通過命令列傳遞給node啟動檔案的引數interpreter:編譯器的絕對路徑(默認node)interpreter_args:傳給編譯器的引數node_args:傳給node的引數
- 進階類
instances:行程數exec_mode:行程的模式(cluster或fork)- PS: cluster模式利用node的child_process模塊范訓多個子行程,主行程監聽埠,子行程只和主行程通信,從而達到單個埠多個行程;通過輪轉方式實作負載均衡
watch:布林值或檔案陣列,允許開啟監聽檔案改動重啟ignore_watch:不監聽的檔案max_memory_restart:超過該記憶體就自動重啟env:應用中的默認環境變數env_:命令列中可傳入的環境變數,覆寫默認環境變數source_map_support:默認true,支持sourcemap檔案
- 日志類
log_date_format:日志時間格式error_file:錯誤日志存放路徑out_file:全部日志存放路徑combine_logs:是否將不同id的行程日志合并merge_logs:同上
- 控制流
min_uptime:pm2認為行程在線的最小時長listen_timeout:如果app沒有發送ready信號,間隔多長時間reloadkill_timeout:從告訴行程要關閉到強制關閉行程的間隔時間wait_ready:是否等待行程發送ready信號max_restarts:最大不穩定重啟次數(不穩定指的是小于1s或者小于的min_uptime重啟)restart_delay:行程掉線后,等待多長時間重啟autorestart: 是否開啟自動重啟
配置項實踐中需要注意的內容
script:若使用cluster模式,必須是啟動檔案入口,不可通過npm啟動max_restarts:指不穩定重啟,即小于1s或min_uptime的重啟,要結合min_uptime配置才起效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 : '[email protected]: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特性
- 后臺運行:普通啟動方式:
node index.js關閉終端就結束行程,pm2可以后臺運行,終端關閉不影響 - 日志管理:應用程式日志保存在服務器的硬碟中
~/.pm2/logs/ - 負載均衡:
pm2可以通過創建共享同一服務器埠的多個子行程來擴展您的應用程式,這樣做還允許您以零秒停機時間重新啟動應用程式 - 終端監控:提供實時的介面,可以在終端中監控您的應用程式并檢查應用程式運行狀況(CPU使用率,使用的記憶體,請求/分鐘等)
- SSH部署:自動部署,避免逐個在所有服務器中進行
ssh - 靜態服務:支持靜態服務器功能
- 多平臺支持:適用于
Linux(穩定)和macOS(穩定)和Windows(穩定) - 集成管理:對于多個行程,不同環境,可以統一配置,方便管理
pm2安裝
使用npm命令npm install pm2即可,配置項參考npm的方式
附錄
參考資料
- 參考教程 ———— pm2 官方教程
- 參考檔案 ———— PM2 常用命令
- 參考檔案 ———— pm2介紹及使用手冊
- 參考檔案 ———— pm2入坑詳解
我是 fx67ll.com,如果您發現本文有什么錯誤,歡迎在評論區討論指正,感謝您的閱讀!
如果您喜歡這篇文章,歡迎訪問我的 本文github倉庫地址,為我點一顆Star,Thanks~ ??
轉發請注明參考文章地址,非常感謝!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467070.html
標籤:其他
上一篇:Hexo博客框架—輕量、一令部署
