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
2
3
4
5
# 启动相关命令
pm2 start app.js
pm2 start app.js --watch -i max -n first_app #[推荐]
1
2
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
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
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
2
3
4
5
6
7
8
封装成脚本 deploy.sh
sudo chmod +x deploy.sh
pm2 deploy deploy.json production $1
# ./deploy.sh
1
2
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
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
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
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
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
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
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
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