PM2实用手册
PM2是Node.js生成环境中的进程管理工具,自带负载均衡功能。
它支持特性有:文件配置、集群模式、热加载、日志管理、系统监控、支持Docker、 启动脚本…等。
安装PM2:
1 | $ yarn global add pm2 |
无缝更新PM2:
1 | $ pm2 update |
启动应用
PM2 中有两种方式启动应用,一种是直接调用应用入口文件,一种是通过调用配置文件启动应用。
命令行启动
1 | $ pm2 start app.js --name "my-api" |
上面命令通过调用 app.js 如果文件启动应用,并给这应用命名为 my-api
1 | $ pm2 start app.js -i 0 |
上面命令会在启动应用同时使用了集群模式,创建了和CPU核数相同的进程。
1 | $ pm2 start app.js -e err.log -o out.log |
上面命令在启动应用的同时指定了错误和输出日志。
配置文件
PM2支持通过配置文件管理应用。在配置文件你可以指定环境变量、日志文件、进程文件,重启最大次数…等配置项。支持JSON和YAML格式。
例子,配置文件 processes.json:
1 | { |
上面在 apps 下配置了两个应用分别是 worker 和 api-app 。
调用 worder 命令如下:
1 | $ pm2 start processes.json -only worker --env production |
配置项
字段 | 类型 | 例子 | 描述 |
---|---|---|---|
name | string | “my-api” | 应用的名字,默认是脚本文件名 |
script | string | “./api/app.js” | 脚本相对 pm2 start的相对路径 |
cwd | string | “/var/www/“ | 指定应用启动的目录 |
instances | number | -1 | 应用启动的实例 |
exec_mode | string | “cluster” | 应用启动模式,可以是”cluster”或”fork” |
watch | boolean or [] | true | 当目录文件或子目录文件有变化时自动重新加载应用 |
ignore_watch | list | [”[/\]./”, “node_modules”] | list中的正则匹配的文件和目录有变化时不重新加载应用 |
max_menory_restart | string | “150M” | 当应用超过设定的内存大小就自动重启 |
env | object | {“NODE_ENV”: “development”, “ID”: “42”} | 传递给应用的环境变量 |
env_ | object | {“NODE_ENV”: “production”, “ID”: “89”} | 命令行启动应用时 –env 参数调用的环境类型 |
log_date_format | string | “YYYY-MM-DD HH:mm Z” | 日志时间格式 |
error_file | string | 错误文件的路径,默认: $HOME/.pm2/logs/XXXerr.log | |
out_file | string | 输出文件路径,默认:$HOME/.pm2/logs/XXXout.log | |
pid_file | string | pid文件路径,默认: $HOME/.pm2/pid/app-pm_id.pid | |
min_uptime | string | 程序最小运行时,运行这么长时间就认为应用启动过,否则认为异常 | |
max_restarts | number | 10 | 应用异常重启最多次数 |
listen_timeout | number | 8000 | 设定的时间内如果应用没有被监听则强制重启(单位:毫秒) |
进程监控
通过下面的命令可以查看已经启动的应用状态。
1 | # $ pm2 ls |
可以将进程列表以JSON格式打印出来:
1 | $ pm2 jlist |
查看某个应用具体信息:
1 | $ pm2 describe <id|app_name> |
监控所有进程CPU或内存使用情况:
1 | $ pm2 monit |
日志管理
1 | $ pm2 logs ['all' | app_name | app_id ] |
上面命令设置了输出所有日志信息或根据应用名称或app_id输出指定应用日志。
1 | $ pm2 logs APP-NAME # 显示 APP-NAME |
部署
PM2提供了简单而功能强大的部署系统并支持代码版本追踪功能。
第一次进行PM2部署要做四步:准备好配置文件、本机生成ssh密钥、初始化远程目录、部署代码。
配置文件
1 | { |
本机生成ssh密钥
1 | ssh-keygen -t rsa |
初始化远程服务器文件夹
1 | pm2 deploy <configuration_file> <environment> setup |
例子:
1 | pm2 deploy ecosystem.json production setup |
部署代码
1 | pm2 deploy ecosystem.json production |
常用命令
1 | pm2 restart <app id|app_name> # 重启应用 |
作者: Fynn
链接: https://fynn90.github.io/2018/01/11/PM2%E5%AE%9E%E7%94%A8%E6%89%8B%E5%86%8C/
本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可