一、前言
pm2是一个进程管理工具,维护一个进程列表,用它来管理node进程,负责所有运行的进程并查看node进程的状态,也支持性能监控、日志、监听代码变化、负载均衡等功能,而且配置简单,指令也比较见名知意。
二、安装&目录建立
1.运行以下指令全局安装
$ npm install -g pm2
2.查看安装是否成功,若出现版本号就代表安装成功了,我这里的版本是5.1.2,包括安装后得到的路径也有显示C:\User\JAY.pm2
$ pm2 -v
3.安装成功后在安装的默认路径就可以看到自动生成了以下目录
$HOME/.pm2/logs // 包括所有应用的日志
$HOME/.pm2/pids // 包括所有应用的 pids
$HOME/.pm2/pm2.log // pm2 日志
$HOME/.pm2/pm2.pid // pm2 pid
三、常用命令
1.基础的启动命令(正式环境启动一般使用第四标题的方法)
$ pm2 start app.js
我们可以在最基本的启动命令后面,添加一些参数选项,去满足我们的需求,常用的参数选项如下:
- --watch:监听应用目录的变化,一旦发生变化,自动重启。
- -i or --instance:启用多少个实例,可用于负载均衡,如果 -i 0 或者 -i max,则根据当前机器核数确定实例数目。
- --ignore-watch:排除监听的目录或文件,可以是特定的文件名,也可以是正则。
- -n or --name:应用的名称,查看应用信息的时候可以用到。
- -o or --output path:标准输出日志文件的路径。
- -e or --error path:错误输出日志文件的路径。
2.查看所有进程
$ pm2 list
3.重启某个进程
$ pm2 restart app.js
4.停止某个进程
$ pm2 stop name | id
5.停止所有进程
$ pm2 stop all
6.删除某个进程
$ pm2 delete name | id
7.删除所有进程
$ pm2 delete all
8.查看某个进程的详细信息
$ pm2 describe name | id
四、配置信息&启动
我们在正式环境启动项目,肯定是需要增加一些特殊的要求比如监听、日志等,如果还是按照基础的start启动则需要打一些繁琐的命令,难以记忆且容易出错,所以我们采用更方便更高端的方式来配置启动项目
如下:我在koa2项目根路径增加了pm2.config.json文件,我们启动只需要在该目录下执行这个json文件即可pm2 start .\pm2.config.json
{
"apps": {
"name": "blog-koa2", // 项目名
"script": "bin/www", // 执行文件
"cwd": "./", // 根目录
"args": "", // 传递给脚本的参数
"interpreter": "", // 指定的脚本解释器
"interpreter_args": "", // 传递给解释器的参数
"watch": true, // 是否监听文件变动然后重启
"ignore_watch": [ // 不用监听的文件
"node_modules",
"public"
],
"exec_mode": "cluster_mode", // 应用启动模式,支持 fork 和 cluster 模式
"instances": "max", // 应用启动实例个数,仅在 cluster 模式有效 默认为 fork
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log", // 正常日志文件
"merge_logs": true, // 设置追加日志而不是新建日志
"log_date_format": "YYYY-MM-DD HH:mm:ss", // 指定日志文件的时间格式
"min_uptime": "60s", // 应用运行少于时间被认为是异常启动
"max_restarts": 30, // 最大异常重启次数
"autorestart": true, // 默认为 true, 发生异常的情况下自动重启
"restart_delay": "60" // 异常重启情况下,延时重启时间
"env": {
"NODE_ENV": "production", // 环境参数,当前指定为生产环境
"REMOTE_ADDR": ""
},
"env_dev": {
"NODE_ENV": "development", // 环境参数,当前指定为开发环境
"REMOTE_ADDR": ""
},
"env_test": { // 环境参数,当前指定为测试环境
"NODE_ENV": "test",
"REMOTE_ADDR": ""
}
}
}
五、高阶应用
1.负载均衡
可以使用 -i 参数配置集群数,实现负载均衡
$ pm2 start app.js -i 3 // 开启三个进程
$ pm2 start app.js -i max // 根据机器CPU核数,开启对应数目的进程
2.日志查看
我们可以通过打开日志文件查看日志外,还可以通过 pm2 logs 来查看实时日志,这点有对于线上问题排查
$ pm2 logs
3.监控
我们可以使用以下命令,查看当前通过 pm2 运行的进程的状态
$ pm2 monit
4.开机自启动
在 linux 中,设置开机自启动,只需要执行以下两个步骤:
- 运行 pm2 startup,即在/etc/init.d/ 目录下生成 pm2-root 的启动脚本,且自动将 pm2-root 设为服务;
- 运行 pm2 save ,会将当前 pm2 所运行的应用保存在 /root/.pm2/dump.pm2 下,当开机重启时,运行pm2-root 服务脚本,并且到 /root/.pm2/dump.pm2 下读取应用并启动;
- 但在 windows 中运行 pm2 startup 时,会报以下错误,因为其不适合 windows 系统; 我们需要额外安装其它库,如下所示:
$ npm install pm2-windows-startup -g
$ pm2-startup install
然后我们只需要运行以下保存命令,就可以将现在正在运行的服务添加到开机自启动命令中;后面即使服务器开机重启,也会将我们保存的服务自动重启;
$ pm2 save
六、可能遇到的问题
1.在项目路径中直接使用pm2命令报错
解决方案:
1.打开 powerShell 用管理员身份运行
2.输入命令:set-ExecutionPolicy RemoteSigned
3.输入A或者Y即可
七、使用pm2管理next服务端渲染项目
$ yarn start
or
$ npm start
改成
$ pm2 start yarn --name "blog-front" --interpreter bash -- start
or
$ pm2 start npm --name "blog-front" --interpreter bash -- start