PM2是什么
PM2(Process Manager 2?)是具有內(nèi)置負(fù)載均衡器的Node.js應(yīng)用程序的生產(chǎn)運行時和進程管理器畏陕。 它允許您永久保持應(yīng)用程序活躍狂打,無需停機即可重新加載它們,并促進常見的Devops任務(wù)僚碎。
重點在于相满,用這玩意啟動的項目可以監(jiān)測運行數(shù)據(jù),也可以同時看多個項目的運行狀況
PM2特性
日志管理:應(yīng)用程序日志保存在服務(wù)器的硬盤中~/.pm2/logs/
負(fù)載均衡:PM2可以通過創(chuàng)建共享同一服務(wù)器端口的多個子進程來擴展您的應(yīng)用程序橡娄。這樣做還允許您以零秒停機時間重新啟動應(yīng)用程序。
終端監(jiān)控:可以在終端中監(jiān)控您的應(yīng)用程序并檢查應(yīng)用程序運行狀況(CPU使用率癣籽,使用的內(nèi)存挽唉,請求/分鐘等)。
SSH部署:自動部署筷狼,避免逐個在所有服務(wù)器中進行ssh瓶籽。
靜態(tài)服務(wù):支持靜態(tài)服務(wù)器功能
多平臺支持:適用于Linux(穩(wěn)定)和macOS(穩(wěn)定)和Windows(穩(wěn)定)
一、PM2安裝
npm install pm2 -g
yarn global add pm2
apt update && apt install sudo curl && curl -sL https://raw.githubusercontent.com/Unitech/pm2/master/packager/setup.deb.sh | sudo -E bash -
二桑逝、PM2命令方式
啟動服務(wù)
pm2 start app.js? ? ? ? ? ? ? ? //啟動app.js應(yīng)用
pm2 start app.js --name demo? ? //啟動應(yīng)用并設(shè)置name
pm2 start app.sh? ? ? ? ? ? ? ? //腳本啟動
停止服務(wù)
pm2 stop all? ? ? ? ? ? ? //停止所有應(yīng)用
pm2 stop [AppName]? ? ? ? //根據(jù)應(yīng)用名停止指定應(yīng)用
pm2 stop [ID]? ? ? ? ? ? //根據(jù)應(yīng)用id停止指定應(yīng)用
刪除應(yīng)用
pm2 delete all? ? ? ? ? ? ? //關(guān)閉并刪除應(yīng)用
pm2 delete [AppName]? ? ? ? //根據(jù)應(yīng)用名關(guān)閉并刪除應(yīng)用
pm2 delete [ID]? ? ? ? ? ? //根據(jù)應(yīng)用ID關(guān)閉并刪除應(yīng)用
創(chuàng)建開機自啟動
pm2 startup
更新PM2
pm2 updatePM2
pm2 update
監(jiān)聽模式
pm2 start app.js --watch? ? //當(dāng)文件發(fā)生變化棘劣,自動重啟
靜態(tài)服務(wù)器
pm2 serve ./dist 9090? ? ? ? //將目錄dist作為靜態(tài)服務(wù)器根目錄俏让,端口為9090
啟用群集模式(自動負(fù)載均衡)
//max 表示PM2將自動檢測可用CPU的數(shù)量并運行盡可能多的進程
//max可以自定義楞遏,如果是4核CPU,設(shè)置為2者占用2個
pm2 start app.js -i max
重新啟動
pm2 restart app.js? ? ? ? //同時殺死并重啟所有進程首昔。短時間內(nèi)服務(wù)不可用寡喝。生成環(huán)境推薦使用reload
0秒停機重新加載
pm2 reload app.js? ? ? ? //重新啟動所有進程,始終保持至少一個進程在運行
pm2 gracefulReload all? //優(yōu)雅地以群集模式重新加載所有應(yīng)用程序
查看啟動列表
pm2 list
查看每個應(yīng)用程序占用情況
pm2 monit
顯示應(yīng)用程序所有信息?
pm2 show [Name]? ? ? //根據(jù)name查看
pm2 show [ID]? ? ? ? //根據(jù)id查看
日志查看
pm2 logs? ? ? ? ? ? //查看所有應(yīng)用日志
pm2 logs [Name]? ? //根據(jù)指定應(yīng)用名查看應(yīng)用日志
pm2 logs [ID]? ? ? //根據(jù)指定應(yīng)用ID查看應(yīng)用日志
保存當(dāng)前應(yīng)用列表
pm2 save
重啟保存的應(yīng)用列表
pm2 resurrect
清除保存的應(yīng)用列表
pm2 cleardump
保存并恢復(fù)PM2進程
pm2 update
三勒奇、PM2配置文件方式
生成示例配置文件
pm2 ecosystem? ? ? ? //生成一個示例JSON配置文件
pm2 init
配置文件示例(實際使用自行刪除)
module.exports = {
? ? apps : [{
? ? ? ? name? ? ? : 'API',? ? ? //應(yīng)用名
? ? ? ? script? ? : 'app.js',? //應(yīng)用文件位置
? ? ? ? env: {
? ? ? ? ? ? PM2_SERVE_PATH: ".",? ? //靜態(tài)服務(wù)路徑
? ? ? ? ? ? PM2_SERVE_PORT: 8080,? //靜態(tài)服務(wù)器訪問端口
? ? ? ? ? ? NODE_ENV: 'development' //啟動默認(rèn)模式
? ? ? ? },
? ? ? ? env_production : {
? ? ? ? ? ? NODE_ENV: 'production'? //使用production模式 pm2 start ecosystem.config.js --env production
? ? ? ? },
? ? ? ? instances:"max",? ? ? ? ? //將應(yīng)用程序分布在所有CPU核心上,可以是整數(shù)或負(fù)數(shù)
? ? ? ? watch:true,? ? ? ? ? ? ? //監(jiān)聽模式
? ? ? ? output: './out.log',? ? ? //指定日志標(biāo)準(zhǔn)輸出文件及位置
? ? ? ? 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遠(yuǎn)程/分支
? ? ? ? ? ? repo : 'git@github.com:repo.git',? //git地址
? ? ? ? ? ? path : '/var/www/production',? ? ? //服務(wù)器文件路徑
? ? ? ? ? ? post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'? //部署后的動作
? ? ? ? }
? ? }
};