# pm2文档

pm2是一个进程管理工具,可以利用它来简化很多 node 应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。

# 安装pm2

npm install pm2 -D

# 启动进程

# app.js是入口文件 进程名为文件名app
pm2 start app.js 

# 重命名进程

# 进程名server
pm2 start app.js --name server

# 监听进程

监听应用目录的变化,一旦发生变化,自动重启。

pm2 start app.js --watch

# 结束进程

pm2 stop app

# 结束所有进程

pm2 stop all

# 删除进程

pm2 delete app

# 删除所有进程

pm2 delete all

# 列出所有进程

pm2 list

# 查看某个进程详情

pm2 describe app

# 重启单个进程

pm2 restart app

# 重启所有进程

pm2 restart all

# 查看单个进程日志

pm2 logs app

# 查看所有进程日志

pm2 logs

# 查看当前通过 pm2 运行的进程的状态

pm2 monit

# 根据文件启动服务

pm2.json

{
    "apps": {
        "name": "app",       // 项目名          
        "script": "app.js",              // 执行文件
        "cwd": "./",                     // 根目录
        "args": "",                      // 传递给脚本的参数
        "interpreter": "",               // 指定的脚本解释器
        "interpreter_args": "",          // 传递给解释器的参数
        "watch": true,                   // 是否监听文件变动然后重启
        "ignore_watch": [                // 不用监听的文件
            "node_modules",
            "public"
        ],
        "exec_mode": "cluster_mode",     // 应用启动模式,支持 fork 和 cluster 模式
        "instances": "1",              // 应用启动实例个数,仅在 cluster 模式有效 默认为 fork max为你设备核数
        "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": ""
        }
    }
}
pm2 start pm2.json

# pm2-logrotate

这个是用来分割日志的,只能用在pm2上。

# 安装

pm2 install pm2-logrotate

注意是 pm2 不是 npm

# 使用方法

pm2 set pm2-logrotate:max_size 1K

# 参数

格式是:pm2 set pm2-logrotate:{paramName} {value}

命令设置具体的参数,支持的参数有:

| Compress:是否通过gzip压缩日志

| max_size:单个日志文件的大小,比如上图中设置为1K(这个其实太小了,实际文件大小并不会严格分为1K)

| retain:保留的日志文件个数,比如设置为10,那么在日志文件达到10个后会将最早的日志文件删除掉

| dateFormat:日志文件名中的日期格式,默认是YYYY-MM-DD_HH-mm-ss,注意是设置的日志名+这个格式,如设置的日志名为abc.log,那就会生成abc_YYYY-MM-DD_HH-mm-ss.log名字的日志文件

| rotateModule:把pm2本身的日志也进行分割

| workerInterval:设置启动几个工作进程监控日志尺寸,最小为1

| rotateInterval:设置强制分割,默认值是0 0 * * *,意思是每天晚上0点分割,这个足够了个人觉得

设置完毕后可通过pm2 conf pm2-logrotate来查看详细的配置。