pm2 进程守护者,保障nodejs的稳定运行
当初写了个
node
服务, 发现一旦异常服务就挂了, 而且没找到什么好方法包住异常, 后面偶然中看到pm2
, 发现是个node
服务的配套神器
1. 什么是pm2
- pm2是守护nodejs进程后台运行的,异常停止后可以自动重启,
- 也可以袒护其它第三方的命令行程序,比如php的命令行
2. 为什么要用pm2
因为pm2
可以方便快捷的帮我们管理命令行程序, 并且有良好的日志和监控机制
- 内建负载均衡(使用Node cluster 集群模块)
- 后台运行
- 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
- 具有Ubuntu和CentOS 的启动脚本
- 停止不稳定的进程(避免无限循环)
- 控制台检测
- 提供 HTTP API
- 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )
3. pm2安装
命令行安装 pm2
npm install -g pm2
4. pm2的基本命令
pm2 start
xxx -i 4 #后台运行pm2,启动4个app.js
也可以把’max’ 参数传递给 start
正确的进程数目依赖于Cpu的核心数目pm2 start
xxx --name my-api # 命名进程pm2 list
:显示所有进程状态pm2 monit
:监视所有进程pm2 logs
: 显示所有进程日志pm2 stop all
: 停止所有进程pm2 restart all
: 重启所有进程pm2 reload all
: 0秒停机重载进程 (用于 NETWORKED 进程)pm2 stop
xxx : 停止指定的进程pxm2 restart
xxx : 重启指定的进程pm2 startup
: 产生 init 脚本 保持进程活着pm2 web
:运行健壮的 computer API endpointpm2 delete
xxx: 杀死指定的进程pm2 delete all
: 杀死全部进程
5. 启动脚本
pm2
可以直接执行json
格式的启动脚本, 脚本是数组类型的, 可以一个脚本启动多个服务
name
: 应用名称script
: 启动脚本路径cwd
: 应用启动的路径args
: 传递给脚本的参数interpreter
: 指定的脚本解释器interpreter_args
: 传递给解释器的参数instances
: 应用启动实例个数,仅在cluster模式有效,默认为forkexec_mode
: 应用启动模式,支持fork和cluster模式watch
: 监听重启,启用情况下,文件夹或子文件夹下变化应用自动重启ignore_watch
: 忽略监听的文件夹,支持正则表达式max_memory_restart
: 最大内存限制数,超出自动重启env
: 环境变量,object类型,如{“NODE_ENV”:“production”, “ID”: “42”}log_date_format
: 指定日志日期格式,如YYYY-MM-DD HH:mm:sserror_file
: 记录标准错误流,$HOME/.pm2/logs/XXXerr.log),代码错误可在此文件查找out_file
: 记录标准输出流,$HOME/.pm2/logs/XXXout.log),如应用打印大量的标准输出,会导致pm2日志过大min_uptime
: 应用运行少于时间被认为是异常启动max_restarts
: 最大异常重启次数,即小于min_uptime运行时间重启次数autorestart
: 默认为true, 发生异常的情况下自动重启cron_restart
: crontab时间格式重启应用,目前只支持cluster模式force
: 默认false,如果true,可以重复启动一个脚本。pm2不建议这么做restart_delay
: 异常重启情况下,延时重启时间
例如:
[{
"name": "nodejs 画图服务",
"args": "",
"script": "./post.js",
"exec_interpreter": "/usr/local/bin/node",
"exec_mode": "fork",
"max_memory_restart": "400M"
}]