今天偶然发现一个部署 Node 生产环境的神器,pm2.5,哦,不,是PM2
pm2 是一个带有负载均衡功能的 Node 应用的进程管理器
它有如下特点:
- 后台运行
- 内建负载均衡
- 无间断重载
- 具有启动脚本
- 停止不稳定的进程
- 强大的控制台检测
- 远程控制和实时的接口API
下载
1 | $ npm install pm2 -g |
创建应用
1 | $ pm2 start index.js # 快速启动应用 |
当看到类似的信息,并且 status=online
时,代表应用启动成功
更多命令如下1
2
3
4
5
6
7
8$ pm2 start | restart | stop index.js # 启动、重启、停止
$ pm2 start app.py # 使用 python 命令启动脚本
$ pm2 start index.js -n index # 启动并指定进程名
$ pm2 start index.js --watch # “热启动” 应用
# --ignore-watch 可以排除再热启动时需要检测的文件,也可以是正则
$ pm2 start index.js -i max # 启动并根据 CPU 开启相应进程数
# 也可以用 -i 2 手动设置
$ pm2 delete <app_name|id|'all'|json_conf> # 删除应用
配置文件
pm2 的启动参数有很多,每次输入这些参数也是很烦人的,我们可以将这些参数放到配置文件中,然后直接启动配置文件即可,创建文件 pm2_config.json
1
2
3
4
5
6
7
8
9{
"apps" : [{
"name" : "tmdapi",
"script" : "./run_api.py",
"interpreter" : "/Users/wxnacy/.pyenv/shims/python",
"watch" : true,
"ignore_watch" : ['winn', 'tests', 'db'],
}]
}
1 | $ pm2 start pm2_config.json |
文件格式支持很多种,如 yml, js, json5
,更多配置见文档
目录文件
pm2 启动一次后就会生成如下目录,相关日志、pid、配置等都在其中
- $HOME/.pm2 will contain all PM2 related files
- $HOME/.pm2/logs will contain all applications logs
- $HOME/.pm2/pids will contain all applications pids
- $HOME/.pm2/pm2.log PM2 logs
- $HOME/.pm2/pm2.pid PM2 pid
- $HOME/.pm2/rpc.sock Socket file for remote commands
- $HOME/.pm2/pub.sock Socket file for publishable events
- $HOME/.pm2/conf.js PM2 Configuration
应用列表
1 | $ pm2 list |
执行该命令,会显示上图一样的信息,也就是应用列表 pm2 (ls | l)
都可以1
2
3$ pm2 logs jlist # 使用 json 格式在一行中展示
$ pm2 logs prettylist # 将 json 数据格式化后展示出来
$ pm2 list --sort=id # 根据id排序
查看日志
1 | $ pm2 logs # 查看所有进程日志 |
更多命令1
2
3
4
5
6
7$ pm2 logs [app-name | id] # 查看指定应用日志
$ pm2 logs /api/ # 使用正则来匹配日志
$ pm2 logs --format # 格式化输出
$ pm2 logs --json # json 格式输出日志
$ pm2 logs --lines 1000 # 返回 1000 行日志
$ pm2 flush # 清空所有日志
$ pm2 reloadLogs # 重新加载所有日志
监控
1 | $ pm2 monit # 检测当前进程 CPU、内存、日志 |
当输入上述命令时,会出现类似上图的界面,在这里我们可以清楚的看到当前进行列表、日志、活跃度、进程详情等信息,使用 左右
来控制面板的焦点,使用 上下键
来滚动屏幕查看信息
keymetrics
如果配合 keymetrics 来使用,监控将变的更加强大
输入注册命令1
$ pm2 register
根据命令行提示一步步完善注册信息,然后运行1
$ pm2 monitor [app-name]
或1
$ pm2 web
会在返回的进程列表中看到一个地址
进入该地址,并使用刚注册的信息登陆,就可以看到一个更加强大的检测系统
自启动
1 | $ pm2 startup # 开机自启动 |
或者指定自己的系统1
$ pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freebsd | systemd | systemv | upstart | launchd | rcd | openrc]
备份和恢复
假如出现机器出现崩溃,那 pm2 进程信息很可能丢失,但是我们可以利用备份来避免这种情况1
$ pm2 (save | dump)
保存完以后我们利用 kill
来模拟 pm2 丢失的情况1
$ pm2 kill
接下来使用恢复命令1
$ pm2 resurrect
这样我们又可以愉快的开发了
其他常用命令
更多的进程命令如下1
2
3
4$ pm2 (show | describe) (app-name| id) # 显示进程详情
$ pm2 reload all # 重新加载索引进程
$ pm2 scale [app-name] 10 # 扩展应用进程数
# 但是如果应用涉及到端口号,则不应该使用这种方式,否则会引起端口冲突
pm2 还有很多强大的功能是我没有提到的,你需要经常使用 pm2 -h /pm2 start -h
等命令查看帮助文档,来更好的完成工作,或者干脆扒一遍文档