PM2介绍
原英文仓库网址,点击这里
PM2 是一个node应用下,自带服务均衡的产品级
进程管理器。使得能够保证应用一直处于运行状态,并且能够不间断的重启服务,方便管理这些系统任务。
生产模式下启动一个应用是很容易的,就像这样:$ pm2 start app.js
PM2支持在Linux(稳定) & MacOSx (稳定) & Windows (稳定)工作.
安装PM2
$ npm install pm2 -g
npm命令是在你安装node时,自带的CLI - 通过NVM安装node
更新PM2
1 | # 安装最新版PM2 |
PM2是无缝更新。
主要功能
命令表一览
1 | # 常用 |
进程管理
一旦应用启动,你可以很方便的列出和管理
列出所有运行中的进程$ pm2 list
直接管理你的进程
1 | $ pm2 stop <app_name|id|'all'|json_conf> |
负载均衡和不间断重启
当应用启动时加上了-i <instance_option>选项时
,集群模式便开启了。
集群模式下,应用汇自动的平衡请求,这个模式下也允许你能够依据CPU的数目灵活的提升表现。
被所有NODE主流框架和任何NODE应用支持而不需要任何code改变。
主要命令
1 | $ pm2 start app.js -i max # Enable load-balancer and start 'max' instances (cpu nb) |
日志能力
显示特定进程或者所有进程,实时,标准,真实,JSON和格式化输出
$ pm2 logs ['all'|app_name|app_id] [--json] [--format] [--raw]
例子:
1 | $ pm2 logs APP-NAME # Display APP-NAME logs |
启动脚本生成
PM2能够生成并配置启动脚本,从而使PM2和你的进程能够在每次服务器重启时保持运行状态。
支持初始化系统包括:systemd (Ubuntu 16, CentOS, Arch), upstart (Ubuntu 14/12), launchd (MacOSx, Darwin), rc.d (FreeBSD).
1 | # Auto detect init system + generate and setup PM2 boot at server startup |
在重启时保存进程列表$ pm2 save
更多关于启动脚本
模块系统
PM2内嵌了简单而强大的模块系统,安装一个模块是很简单直接的事。$ pm2 install <module_name>
下面是一些兼容模块 (standalone Node.js applications managed by PM2):
pm2-logrotate auto rotate logs of PM2 and applications managed
pm2-webshell expose a fully capable terminal in browsers
pm2-server-monit monitor your server health
Keymetrics监测
如果你使用PM2来管理你的NodeJS app,Keymetrics使得通过服务器去监测应用变得很容易。
谢谢,希望你喜欢PM2!
更多关于PM2的资料
- Application Declaration via JS files
- Watch & Restart
- PM2 API
- Deployment workflow
- PM2 on Heroku/Azure/App Engine
- PM2 auto completion
- Using PM2 in ElasticBeanStalk
- PM2 Tutorial Series
更新日志
贡献者
常见问题
以下问题为官方文档没有明确指出,但是在实际使用中却会遇到的问题,这里说明下。
为什么有时候执行pm2 list
不显示appid等信息
其实这个主要看终端窗体大小,如下图
你会看到两次执行,出来的窗体显示信息不同,实际原因是第一次执行时候,我的终端窗体很窄,拉大后再执行命令就显示下部的样子,所以想显示完整的应用信息,需要确保终端窗体大一些。
如何重启、关闭等多个应用
比如我们有appid为0、1两个应用,除了单个或全部方式操作外,其实pm2支持多个,操作方式如下pm2 start 0 1
,这样就会启动id为0和1两个应用,stop、restart等操作等同。
pm2应用日志有必要吗
一般而言,pm2管理的应用本身都有自己日志系统,比如我开发node应用一般会使用log4js
,所以pm2没必要输出需要禁用
pm2启动后,环境变量未定义
最近web有需要调用环境变量的地方,发现当node启动时,环境变量获取OK,但pm2启动报未定义。
解决办法加参数--env production