pm2常用命令及管理

# 开发环境分类

现在负责的项目就是你所说的四个环境 + 测试环境:

  • local:本地开发环境
  • dev:内部开发环境
  • test:供测试人员测试环境
  • stage:试运行环境(新功能部分目标用户使用)
  • production:对外开放的产品环境

# pm2

# 安装环境

git; 配置仓库的,ssh;

命令提示:pm2 -h也可以管理Go语言

运行以下命令进行全局安装

$ npm install -g pm2
1

安装完之后,会自动创建以下目录:

$HOME/.pm2/logs // 包括所有应用的日志
$HOME/.pm2/pids // 包括所有应用的 pids
$HOME/.pm2/dump.pm2 // 开机自启动配置
$HOME/.pm2/pm2.log // pm2 日志
$HOME/.pm2/pm2.pid // pm2 pid
1
2
3
4
5

# 启动相关命令

pm2 start app.js
pm2 start app.js --watch -i max -n first_app #[推荐]
1
2
# 命令行参数

常用的参数选项如下所示:

  • --watch:监听应用目录的变化,一旦发生变化,自动重启。
  • -i or --instance:启用多少个实例,可用于负载均衡,如果 -i 0 或者 -i max,则根据当前机器核数确定实例数目。
  • --ignore-watch:排除监听的目录或文件,可以是特定的文件名,也可以是正则。
  • -n or --name:应用的名称,查看应用信息的时候可以用到。
  • -o or --output path:标准输出日志文件的路径。
  • -e or --error path:错误输出日志文件的路径。
# 命令管理
pm2 list #查看列表
pm2 restart app.js # 重启命令
pm2 stop app_name | app_id # 停止命令
pm2 stop all #停止全部的应用
pm2 del app_name |  app_id #删除命令
pm2 delete app_name | app_id #删除命令
pm2 delete all #删除全部的应用
pm2 show/descripe app_name | app_id #查看某个进程的信息
1
2
3
4
5
6
7
8

# 常用管理命令

pm2 list
pm2 show 0 # 最后有提示命令
pm2 logs 0 --lines 1000
pm2 reload 0
pm2 start pm2.json

pm2 init|ecosystem #生成配置文件;
pm2 deploy ecosystem.json production setup
pm2 deploy ecosystem.json production
pm2 deploy deploy.json stage $1 #做成脚本启动

# ./deploy.sh
# 前端部署;编译以后拷贝一下dist文件到服务器上
scp -r dist samy@192.168.11.xxx:/home/samy/deploy/etag-web/
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 部署常用命令

pm2 deploy deploy.json stage setup
pm2 deploy deploy.json stage
pm2 deploy deploy.json production --force
pm2 deploy deploy.json stage --force

#查看线上.deploys的git版本记录
pm2 deploy deploy.json stage list 
pm2 deploy deploy.json stage revert 1 #可查看提交记录,回滚到想要的版本 
1
2
3
4
5
6
7
8

封装成脚本 deploy.sh

sudo chmod +x deploy.sh

pm2 deploy deploy.json production $1
# ./deploy.sh
1
2

# 其他命令

cnpm install -g pm2 # 安装pm2

pm2 -h

pm2 ecosystem|generate [mode]  #generate a process conf file. (mode = null or simple)
pm2 deploy deploy.json production (--setup) #一键部署发布

pm2 start app.js #启动应用
pm2 start deploy.json #安装指定配置启动【推荐】

pm2 list #列出所有应用 
pm2 show [app id]# 查看某一 pid为31480,占用内存为89.113 MB, mode模式
pm2 monit # 查看资源消耗

pm2 logs # 查看所有日志
pm2 logs 0
pm2 logs 0 --lines 1000
pm2 flush
pm2 reloadLogs

pm2 restart [app id] #重启应用
pm2 stop [app id] #停止应用
pm2 reload 0
pm2 del 0

pm2 web #开启api访问 launch a health API on 0.0.0.0:9615
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 配置文件

默认初始化的文件;运行pm2 ecosystem生成的;ecosystem.config.js

module.exports = {
  apps : [{
    script: 'index.js',
    watch: '.'
  }, {
    script: './service-worker/',
    watch: ['./service-worker']
  }],

  deploy : {
    production : {
      user : 'SSH_USERNAME',
      host : 'SSH_HOSTMACHINE',
      ref  : 'origin/master',
      repo : 'GIT_REPOSITORY',
      path : 'DESTINATION_PATH',
      'pre-deploy-local': '',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
      'pre-setup': ''
    }
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

实践中用到的:deploy.json

express/koa项目部署:

{
  "apps" : [

    // First application
    {
      "name"      : "AA",
      "script"    : "dist/server/",
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production" : {
        "NODE_ENV": "production",
        "PORT": 8094
      }
    }
  ],

  "deploy" : {
    "dev" : {
      "user" : "samy",
      "host" : "192.168.11.xxx",
      "ref"  : "origin/xx",
      "repo" : "git@github.com:xx/AA.git",
      "path" : "/home/samy/deploy/AA",
      "pre-setup" : "mkdir -p /home/samy/deploy/AA/shared/uploads",
      "post-deploy" : "./start.sh deploy.json meeting"
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

.start.sh

#!/bin/bash
# . ~/.nvm/nvm.sh
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

if [ $# -ne 2 ]; then
  echo "arguments error"
  exit 1
fi

nvm use 10

UPLOADS_PATH=/home/samy/deploy/$2/shared/uploads

cnpm install
gulp build
pm2 startOrRestart $1 --env production

createLink() {
  if [[ ! -L $2 ]]; then
    ln -s $1 $2
  fi
}

createLink $UPLOADS_PATH uploads
createLink $UPLOADS_PATH dist/uploads
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

eggjs项目部署:

{
    "apps" : [
      {
        "name"      : "etag",
        "script"    : "etag/",
        "env": {
          "COMMON_VARIABLE": "true"
        },
        "env_production" : {
          "NODE_ENV": "production",
          "PORT": 7082
        }
      }
    ],
    "deploy" : {
      "stage" : {
        "user" : "samy",
        "host" : "102.108.111.xxx",
        "port" : "96xx",
        "ref"  : "origin/master",
        "repo" : "git@github.com:samyxx/etag-cloud.git",
        "path" : "/home/samy/deploy/etag-cloud",
        "post-deploy" : "cd etag-adm && cnpm install && npm stop && npm run dev &"
      }
    }
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 高阶应用

# 负载均衡

可以使用 -i 参数配置集群数,实现负载均衡; 比如:要考虑到socket相关的兼容设置;

$ pm2 start app.js -i 3 # 开启三个进程
$ pm2 start app.js -i max # 根据机器CPU核数,开启对应数目的进程 
#配置方式,详见下面内存大小设置;
1
2
3

# 设置内存大小

原始命令:

pm2 start app.js --max-memory-restart 2000M -i max -n neocloud --node-args="--max-old-space-size=4096"
1

等同于下面的json配置启动;

配置文件方式: "max_memory_restart": "2000M","instances": 4, "exec_mode": "cluster"

启动:pm2 startOrRestart deploy.json

deploy.json

"apps" : [
    {
        "name"      : "neocloud",
        "script"    : "dist/server/",
        "instances": 4,
        "exec_mode": "cluster",
        "max_memory_restart": "4096M", //4G
        "max_restarts" : 3,
        "min_uptime"   : 300
        "env": {
            "COMMON_VARIABLE": "true",
            "LC_ALL": "en_US.UTF-8",
            "LANG": "en_US.UTF-8"
        },
        "env_production" : {
            "NODE_ENV": "production",
            "PORT": 8094,
        },
       "args": [
      		 "--max_old_space_size=4096"
     		]
    }
],
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 日志查看

pm2 logs
1

# 监控

通过pm2自带的管理,及阿里云性能监控平台;

pm2 monit
1

# 参考链接

  • http://pm2.keymetrics.io/docs/usage/quick-start/
  • https://pm2.keymetrics.io/docs/usage/application-declaration/
上次更新: 2022/04/15, 05:41:31
×