PM2是具有内置负载平衡器的Node.js应用程序的生产过程管理器。 它使您可以永久保持应用程序的活动状态,无需停机即可重新加载应用程序,并且可以方便常见的系统管理任务
在生产模式下启动应用程序非常简单:
$ pm2 start app.js
官方网站:http://pm2.keymetrics.io/
翻译自:https://github.com/Unitech/pm2
适用于Linux(稳定)&MacOSx(稳定)&Windows(稳定)。 所有Node.js版本都支持 从Node.js 0.12开始。
安装
$ npm install pm2 -g
在安装Node.js时,npm是一个内建CLI
启动应用程序
$ pm2 start app.js
现在,您的应用程序已被守护程序,监控并保持永久生效。
官方的Docker Image
Docker Hub PM2镜像:
PM2官方Docker Image
使用pm2-docker CLI:
FROM keymetrics/pm2:latest [...] CMD [ "pm2-docker", "start", "ecosystem.config.js" ]
监视PM2和应用程序
要监视你的应用程序,只需输入 :
$ pm2 register
更新PM2
$ npm install pm2@latest -g #安装最新的PM2版本
$ pm2 update #保存进程列表,退出旧的PM2并恢复所有进程
主要特点
命令概述
#常规
$ npm install pm2 -g #安装PM2
$ pm2 start app.js #启动,守护进程和自动重启应用程序(Node)
$ pm2 start app.py #启动,守护进程和自动重启应用程序(Python)
$ pm2 start npm - start #启动,守护进程并自动重新启动节点应用程序
#集群模式(仅适用于Node.js)
$ pm2 start app.js -i 4 #在集群模式下启动4个应用程序实例,它会负载平衡网络查询到每个应用程序
$ pm2 reload all#零秒停机重新加载
$ pm2 scale [app-name] 10 #将群集应用程序扩展到10进程
#进程监视
$ pm2 list #列出所有以PM2开始的进程
$ pm2 monit #显示每个应用程序的内存和CPU使用情况
$ pm2 show [app-name] #显示应用程序的所有信息
#日志管理
$ pm2 logs #显示所有应用程序的日志
$ pm2 logs [app-name] #显示特定应用程序的日志
$ pm2 logs --json #以JSON格式记录
$ pm2 flush
$ pm2 reloadLogs
#进程状态管理
$ pm2 start app.js --name= " api " #启动应用程序并将其命名为“api”
$ pm2 start app.js - -a 34 #启动应用程序并传递选项“-a 34”作为参数
$ pm2 start app.js --watch #重新启动应用程序的文件更改
$ pm2 start script.sh #启动bash脚本
$ pm2 start app.json #启动在app.json中声明的所有应用程序
$ pm2 reset [app-name] #重置所有计数器
$ pm2 stop all #停止所有应用程序
$ pm2 stop 0 #停止ID为0的进程
$ pm2 restart all #重新启动所有应用程序
$ pm2 gracefulReload all #以集群模式轻松地重新加载所有应用程序
$$ pm2 delete all #杀死和删除所有的应用程序
$ pm2 delete 0 #删除ID为0的应用程序
#启动/引导管理
$ pm2 startup #检测init系统,在启动时生成并配置pm2启动
$ pm2 save #保存当前进程列表
$ pm2 resurrect #恢复以前保存的进程
$ pm2 unstartup #禁用并删除启动系统
$ pm2 update #保存进程,杀死PM2并恢复进程
$ pm2 generate #生成一个示例json配置文件
#部署
$ pm2 deploy app.json prod setup #安装程序“prod”远程服务器
$ pm2 deploy app.json prod #更新“prod”远程服务器
$ pm2 deploy app.json prod revert 2 #将 “prod”远程服务器还原为2
#模块系统
$ pm2 module:generate [name] #生成名称为[name]的样本模块
$ pm2 install pm2-logrotate #安装模块(这里是一个日志轮换系统)
$ pm2 uninstall pm2-logrotate #卸载模块
$ pm2 publish #增量版本,git push和npm发布
流程管理
一旦应用程序启动,您可以轻松地列出和管理它们:
列出所有运行的进程:
$ pm2 list
管理您的流程非常简单:
$ pm2 stop <app_name|id|'all'|json_conf>
$ pm2 restart <app_name|id|'all'|json_conf>
$ pm2 delete <app_name|id|'all'|json_conf>
为了确保它重新评估在json_conf
声明的环境变量,将它作为参数传递给它,如果有的话,也可以从你的json_conf
选择你自定义的env
名称:
$ pm2 restart [--env ]
要获得有关特定流程的更多详细信息:
$ pm2 describe <id|app_name>
负载平衡和零秒停机重新加载
当使用-i 选项启动应用程序时,将启用集群模式 。
群集模式启动您的应用程序的实例,并在每个实例之间自动负载平衡HTTP / TCP / UDP。 这可以根据可用的CPU数量来提高整体性能。
由所有主要的Node.js框架和任何Node.js应用程序无缝支持,无需更改任何代码:
主要命令:
$ pm2 start app.js -i max #启用load-balancer并启动'max'实例(cpu nb)
$ pm2 reload all #零秒重新载入
$ pm2 scale #增加/减少进程号码
CPU /内存监视
监测所有已启动的程序:
$ pm2 monit
日志
实时显示指定进程或所有进程的日志。 标准,原始,JSON和格式化输出都可以。
$ pm2 logs ['all'|app_name|app_id] [--json] [--format] [--raw]
例子:
$ pm2 logs APP-NAME #显示APP-NAME日志
$ pm2 logs --json # JSON输出
$ pm2 logs --format #格式输出
$ pm2 flush #刷新所有日志
$ pm2 reloadLogs #重新加载所有日志
启动脚本生成
PM2可以生成并配置一个启动脚本,以便在每次服务器重新启动时保持PM2和您的进程活动。
支持init系统,如:systemd(Ubuntu 16,CentOS,Arch),upstart(Ubuntu 14/12),launchd(MacOSx,Darwin),rc.d(FreeBSD)。
$ pm2 startup #自动检测init系统+在服务器启动时生成并设置PM2启动
$ pm2 startup [platform] #手动指定启动系统,可以是:systemd,upstart,launchd,rcd
$ pm2 unstartup #在服务器启动时禁用并删除PM2引导
在重新启动时保存/冻结进程列表:
$ pm2 save
模块系统
PM2嵌入一个简单而强大的模块系统。 安装模块非常简单:
$ pm2 install < module_name >
以下是一些PM2兼容模块(由PM2管理的独立Node.js应用程序):
pm2-logrotate 自动轮换PM2和管理的应用程序的日志
pm2-webshell 在浏览器中显示一个功能齐全的终端
pm2-server-monit 监视您的服务器运行状况
编写你自己的模块
Keymetrics监测
如果您使用PM2管理您的NodeJS应用程序,则Keymetrics可以轻松监控和管理跨服务器的应用程序。 随意尝试一下:
PM2的监控仪表板