pm2
配置文件格式
PM2的配置文件可以用3种文件格式编写:
- JavaScript
ecosystem.config.js
推荐使用 - JSON
- YAML
特别注意:JavaScript格式的配置文件的名称必须以.config.js
作为结尾。例如:ecosystem.config.js
。
配置
name
变量类型:字符串 应用名称
script
变量类型:字符串 脚本路径
env
变量类型:对象 环境参数
watch
变量类型:布尔值或数组
- 若为
true
,则PM2将在监听到文件夹或子文件夹中的文件发生变更时,自动重启应用 - 若为数组,则PM2将在监听到数组中的文件夹或子文件夹中的文件发生变更时,自动重启应用
注意:
默认情况下,忽略
node_modules
。如果需要解除忽略,请使用ignore_watch
反向解除默认情况下,
watch
无法监听以.
开头的文件或文件夹,但可以使用ignore_watch
反向实现
示例:以下配置皆无法监听以 .
开头的文件或文件夹
learn_pm2/ecosystem.config.js
module.exports = {
apps: [
{
name: "learn_pm2",
script: "index.js",
watch: true
}
]
};
learn_pm2/ecosystem.config.js
module.exports = {
apps: [
{
name: "learn_pm2",
script: "index.js",
watch: [".foo"]
}
]
};
示例:监听所有文件或文件夹,包括以.
开头的文件或文件夹
learn_pm2/ecosystem.config.js
module.exports = {
apps: [
{
name: "learn_pm2",
script: "index.js",
watch: true,
ignore_watch: []
}
]
};
watch_delay
变量类型:数字 单位:毫秒 两次重启之间的时间间隔 使用禁止前沿执行的throttle策略
示例: watch_delay: 4e3
表示:
当PM2监听到第
1
次文件变更时,将计划在4e3
毫秒后重启应用如果在这
4e3
毫秒内又监听到新的文件变更,之前的延时重启计划不受影响,且这次新的文件变更将不会生成新的延时重启计划
ignore_watch
变量类型:数组 不需要监听的列表
out_file
单个应用的日志文件名,记录使用console.log()
输出的信息。
示例: learn_pm2/ecosystem.config.js
module.exports = {
apps: [
{
name: "learn_pm2",
script: "index.js",
watch: ["index.js"],
out_file: "out.log"
}
]
};
error_file
单个应用的错误日志文件名,记录使用console.error()
输出的信息。 默认值:$HOME/.pm2/logs/XXXerr.log
示例:
learn_pm2/ecosystem.config.js
module.exports = {
apps: [
{
name: "learn_pm2",
script: "index.js",
watch: ["index.js"],
error_file: "error.log"
}
]
};
time
是否在out_file
和error_file
中启用时间戳,默认为false
。
示例:
module.exports = {
apps: [
{
name: "learn_pm2",
script: "index.js",
watch: ["index.js"],
out_file: "out.log",
error_file: "error.log",
time: true
}
]
};
多应用
一个配置文件可以同时配置多个应用。
示例:
learn_pm2/ecosystem.config.js
module.exports = {
apps: [
{
name: "foo",
script: "foo.js"
},
{
name: "bar",
script: "bar.js"
}
]
};
bug
经过测试,以下情况会导致watch
特性未开启(尽管显示已开启)。
示例:
learn_pm2/ecosystem.config.js
module.exports = {
apps: [
{
name: "learn_pm2",
script: "index.js",
watch: true
}
]
};
- 启动
#!/usr/bin/env bash
npx pm2 start
- 停止
#!/usr/bin/env bash
npx pm2 stop ecosystem.config.js
- 再次启动
#!/usr/bin/env bash
npx pm2 start
- 查询PM2管理的应用列表
#!/usr/bin/env bash
npx pm2 list
此时 watch
特性显示为启用,但实际却是关闭的。
这个问题目前有2种解决方案:
方案一: 在停止后先删除再启动
#!/usr/bin/env bash
npx pm2 delete ecosystem.config.js
npx pm2 start
方案二: 在停止后使用--watch
参数单独启动
#!/usr/bin/env bash
npx pm2 start learn_pm2 --watch
常用指令
pm2 start app.js # 启动app.js应用程序
pm2 start app.js --name="demo" # 启动应用程序并命名为 "demo"
pm2 start app.js --watch # 当文件变化时自动重启应用
pm2 start script.sh # 启动 bash 脚本
pm2 list # 列表 PM2 启动的所有的应用程序
pm2 show [app-name] # 显示应用程序的所有信息
pm2 logs # 显示所有应用程序的日志
pm2 logs [app-name] # 显示指定应用程序的日志
pm2 stop all # 停止所有的应用程序
pm2 stop 0 # 停止 id为 0的指定应用程序
pm2 restart all # 重启所有应用
pm2 restart 0 # 重启id为0 的应用程序
pm2 delete all # 关闭并删除所有应用
pm2 delete 0 # 删除指定应用 id 0
pm2 startup # 创建开机自启动命令
pm2 save # 保存当前应用列表
pm2 restart start.json --max-memory-restart 20M # 内存达到20m重启
// ecosystem.config.js
module.exports = {
apps: [
{
name: "onebyone",
watch: true,
cwd: "./",
script: "node",
args: "./node_modules/.bin/nuxt start",
max_memory_restart: "40M",
log_date_format: "YYYY-MM-DD HH:mm Z",
error_file: "/usr/local/wwwlogs/surmon.me/error.log",
out_file: "/usr/local/wwwlogs/surmon.me/out.log",
env: {
"NODE_ENV": "production",
}
}
]
}