- 内建负载均衡(使用Node cluster 集群模块) 后台运行
- 0秒停机重载,维护升级的时候不需要停机
- 具有Ubuntu和CentOS 的启动脚本
- 停止不稳定的进程(避免无限循环)
- 控制台检测
- 提供 HTTP API
- 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )
服务器安装pm2
npm install pm2 -g
运行打包好的nodejs后端
复制打包好的dist文件夹到服务器,之后运行:
pm2 start dist/bundle.js
运行打包好的vue、react前端
服务器端新建一个项目:
npm initnpm install pushstate-server --save
项目根目录新建server.js,写入:
var server = require('pushstate-server');server.start({port: 3000, # 指定服务运行的端口directory: './dist' # 打包文件的目录});
复制打包好的dist文件夹到服务器的该项目目录下,之后运行:
pm2 start server.js
pm2 运行进程的不同方式
pm2 start app.js -i max 根据有效cpu数目启动最大进程数目pm2 start app.js -i 3 启动3个进程pm2 start app.js -x 用fork模式启动 app.js,而不是使用 clusterpm2 start app.js -x -- -a 23 用fork模式启动 app.js 并且传递参数 (-a 23)pm2 start app.js --name serverone 启动一个进程并把它命名为 serveronepm2 stop serverone 停止 serverone 进程pm2 start process.json 启动进程, 在process.json里设置选项pm2 start app.js -i max -- -a 23 在--之后给 app.js 传递参数pm2 start app.js -i max -e err.log -o out.log 启动并生成一个log文件
通过json配置启动选项
上面提到的process.json:
{"apps": [{"name": "mywork","cwd": "/srv/node-app/current","script": "bin/www","log_date_format": "YYYY-MM-DD HH:mm Z","error_file": "/var/log/node-app/node-app.stderr.log","out_file": "log/node-app.stdout.log","pid_file": "pids/node-geo-api.pid","instances": 6,"min_uptime": "200s","max_restarts": 10,"max_memory_restart": "1M","cron_restart": "1 0 * * *","watch": false,"merge_logs": true,"exec_interpreter": "node","exec_mode": "cluster_mode","autorestart": true,"vizion": false}]}
- apps: json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
- name: 应用程序名称
- cwd:应用程序所在的目录
- script: 应用程序的脚本路径
- 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特性(版本控制)
pm2开机启动服务
设置方法
自动判断系统类型并生成指令
pm2 startup# don't pass sudo before the command
复制粘贴并运行pm2给的指令从而配置开机启动的script
- 将想要设为开机启动的服务运行起来
- 保存这些服务到dump文件中
开机时,pm2自启动钩子回去运行dump文件中保存的服务pm2 save
注意
如果升级了node.js,需要用pm2 unstartup后再执行pm2 startup,重新启用开机自启动服务。
官网详情
pm2其他指令
pm2 list # 查看pm2进程表pm2 describe/info <id/name> # 查看某一进程的详细信息pm2 restart/reload/stop/delete all # 重启/重载/停止/删除 pm2进程表中的所有进程pm2 restart/reload/stop/delete 0 # 重启/重载/停止/删除 pm2进程表中进程为0的进程pm2 logs [--raw] # 显示所有进程日志pm2 flush # 清空所有日志文件pm2 reloadLogs # 重载所有日志pm2 monit # 可以查看进程的cpu占用和内存消耗等信息,ctrl + c 退出
