PM2的配置文件


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/10/04/PM2%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/

摘要

本文主要讲述了:

  1. 配置文件格式
  2. 配置
  3. 多应用
  4. bug

正文

配置文件格式

PM2 的配置文件可以用 3 种文件格式编写:

  1. JavaScript ecosystem.config.js 推荐使用
  2. JSON
  3. YAML

特别注意:JavaScript 格式的配置文件的名称必须以.config.js作为结尾。例如:ecosystem.config.js

配置

name

值类型:字符串

应用名称

script

值类型:字符串

脚本路径

env

值类型:对象

环境参数

watch

值类型:布尔值或数组

  • 若为true,则 PM2 将在监听到目录或子目录中的文件发生变更时,自动重启应用
  • 若为数组,则 PM2 将在监听到数组中的目录或子目录中的文件发生变更时,自动重启应用

注意:pm2 隐式忽略node_modules和以.打头的文件或目录。如果需要监听它们,可以将ignore_watch置空

示例:以下配置皆无法监听以.打头的文件或目录

learn_pm2/ecosystem.config.js

1
2
3
4
5
6
7
8
9
module.exports = {
apps: [
{
name: 'learn_pm2',
script: 'index.js',
watch: true,
},
],
};

learn_pm2/ecosystem.config.js

1
2
3
4
5
6
7
8
9
module.exports = {
apps: [
{
name: 'learn_pm2',
script: 'index.js',
watch: ['.foo'],
},
],
};

示例:监听所有文件或目录,包括node_modules和以.打头的文件或目录

learn_pm2/ecosystem.config.js

1
2
3
4
5
6
7
8
9
10
module.exports = {
apps: [
{
name: 'learn_pm2',
script: 'index.js',
watch: true,
ignore_watch: [],
},
],
};

watch_delay

值类型:数字

单位:毫秒

两次重启之间的时间间隔

使用禁止前沿执行的 throttle 策略

示例:

watch_delay: 4e3表示:

  1. 当 PM2 监听到第1次文件变更时,将计划在4e3毫秒后重启应用
  2. 如果在这4e3毫秒内又监听到新的文件变更,之前的延时重启计划不受影响,且这次新的文件变更将不会生成新的延时重启计划

ignore_watch

值类型:数组

不需要监听的列表

out_file

单个应用的日志文件名,记录使用console.log()输出的信息

示例:

learn_pm2/ecosystem.config.js

1
2
3
4
5
6
7
8
9
10
module.exports = {
apps: [
{
name: 'learn_pm2',
script: 'index.js',
watch: ['index.js'],
out_file: 'out.log',
},
],
};

error_file

单个应用的错误日志文件名,记录报错信息和使用console.error()输出的信息

默认值:$HOME/.pm2/logs/{appName}-error.log

示例:

learn_pm2/ecosystem.config.js

1
2
3
4
5
6
7
8
9
10
module.exports = {
apps: [
{
name: 'learn_pm2',
script: 'index.js',
watch: ['index.js'],
error_file: 'error.log',
},
],
};

time

是否在out_fileerror_file中启用时间戳,默认为false

示例:

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
apps: [
{
name: 'foo',
script: 'foo.js',
},
{
name: 'bar',
script: 'bar.js',
},
],
};

bug

经过测试:以下情况会导致watch特性未开启(尽管显示已开启)。

示例:

learn_pm2/ecosystem.config.js

1
2
3
4
5
6
7
8
9
module.exports = {
apps: [
{
name: 'learn_pm2',
script: 'index.js',
watch: true,
},
],
};
  1. 启动
1
2
3
#!/usr/bin/env bash

npx pm2 start
  1. 停止
1
2
3
#!/usr/bin/env bash

npx pm2 stop ecosystem.config.js
  1. 再次启动
1
2
3
#!/usr/bin/env bash

npx pm2 start
  1. 查询 PM2 管理的应用列表
1
2
3
#!/usr/bin/env bash

npx pm2 list

此时watch特性显示为启用,但实际却是关闭的。

这个问题目前有 2 种解决方案:

方案一:

在停止后先删除再启动

1
2
3
4
#!/usr/bin/env bash

npx pm2 delete ecosystem.config.js
npx pm2 start

方案二:

在停止后使用--watch参数单独启动

1
2
3
#!/usr/bin/env bash

npx pm2 start learn_pm2 --watch

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/10/04/PM2%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6/


本文对你有帮助?请支持我


支付宝
微信