npm install -g pm2
pm2 -v
#查看进程
pm2 list
#启动app.js应用程序(app.js自定义配置)
pm2 start <app.js>
#停止所有程序
pm2 stop all
#重启app.js应用程序
pm2 restart <app.js>
#关闭并删除所有应用
pm2 delete all
#保存当前应用列表
pm2 save
#创建开机自启动命令
pm2 startup
#设置开机自启动
systemctl enable pm2-root
#实时查看日志
pm2 logs
运行命令pm2 ecosystem
或pm2 init
,默认会生成ecosystem.config.js
配置文件
自定义ecosystem.config.js
{
"apps": [{
"name": "app", #程序名称
"script": "./", #启动脚本
"cwd": "./", #程序目录
"watch":[ #需要监控的目录,一旦变化自动重启
"views"
],
"env": {
"NODE_ENV": "production" #环境参数,当前指定为生产环境
}
"error_file":"./logs/err.log", #错误日志路径
"out_file":"./logs/out.log", #普通日志路径
"log_date_format":"YYYY-MM-DD HH:mm Z" #日期格式
}]
}
PM2常用配置项解析
1. apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
2. name:应用程序名称"app"
3. cwd:应用程序所在的目录"./"
4. script:应用程序的脚本路径"./"
5. log_date_format: 日志文件名输出日期格式"YYYY-MM-DD HH:mm Z"
6. error_file:自定义应用程序的错误日志文件"./logs/app-err.log",
7. out_file:自定义应用程序日志文件"./logs/app-out.log"
8. instances: 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
9. min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
10. max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
11. cron_restart:定时启动,解决重启能解决的问题
12. watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
13. "ignore_watch": [ // 不用监听的文件
"node_modules",
"logs"
],
13. merge_logs:// 设置追加日志而不是新建日志
14. exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
15. exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
16. autorestart:启用/禁用应用程序崩溃或退出时自动重启,默认为true, 发生异常的情况下自动重启
17. vizion:启用/禁用vizion特性(版本控制)
18. "args": "", // 传递给脚本的参数
19. env: {
PM2_SERVE_PATH: "./apidoc", //静态服务路径
PM2_SERVE_PORT: 8080, //静态服务器访问端口
NODE_ENV: 'development' //启动默认模式
},
20. env_production : {
NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production
},
/root/.pm2/logs
manager-server-error-0.log #manager-server程序内的错误日志
manager-server-out-0.log #manager-server程序内的普通日志
trade-server-error-1.log #trade-server程序内的错误日志
trade-server-out-1.log #trade-server程序内的普通日志
以上日志名称及路径可进入配置文件自定义修改
为了更方便阅读查找log,可以进行一下操作:
修改配置文件ecosystem.config.js如下注释处
module.exports = {
apps: [
{
name: "manager-server",
script: "./dist/src/index.js",
cwd:"./manager-server",
node_args: "-r dotenv/config",
args: "dotenv_config_path=../.env",
instances: 1,
autorestart: true,
watch: false,
log_date_format: "YYYY-MM-DD HH:mm:ss", #增加时间格式
error_file: "/var/log/kingnewoptions/manager-server.log", #按需求修改路径,指向同一log文件
out_file: "/var/log/kingnewoptions/manager-server.log", #同上
merge_logs: true, #合并日志
},
{
name: "trade-server",
script: "./dist/src/index.js",
cwd:"./trade-server",
node_args: "-r dotenv/config",
args: "dotenv_config_path=../.env",
instances: 1,
autorestart: true,
watch: false,
log_date_format: "YYYY-MM-DD HH:mm:ss", #增加时间格式
error_file: "/var/log/kingnewoptions/trade-server.log", #按需求修改路径,指向同一log文件
out_file: "/var/log/kingnewoptions/trade-server.log", #同上
merge_logs: true, #合并日志
}]
};
增加日志分割功能需安装工具pm2-logrotate
安装命令
pm2 install pm2-logrotate
安装完成后就可以设置参数,例如:设置日志最大容量为10M
[root@wfq Kingnewoptions]# pm2 set pm2-logrotate:max_size 10M #设置日志最大容量为10M
[PM2] Module pm2-logrotate restarted
== pm2-logrotate ==
┌────────────────┬─────────────────────┐
│ key │ value │
├────────────────┼─────────────────────┤
│ max_size │ 10M │ #日志最大为10M,超过就会分割
│ dateFormat │ YYYY-MM-DD_HH-mm-ss │ #日志文件名日期格式
│ retain │ 30 │ #保留文件个数
│ compress │ false │ #是否压缩日志
│ workerInterval │ 30 │ #监控日志尺寸
│ rotateInterval │ 0 0 * * * │ #设置强制分割,默认为每天0点分割
│ rotateModule │ true │ #是否分割pm2本身日志
└────────────────┴─────────────────────┘
以上是参数解释,都为默认参数,可根据需求配置参数,设置完成后需重启pm2生效,执行 pm2 restart
,如报错,可先删掉进程再启动,先pm2 delete all
后pm2 start