Configuration

配置文件

在使用 PM2 管理多个应用程序时,使用一个 JS 配置文件来组织它们。

生成配置

要生成示例配置文件,您可以键入以下命令:

这将生成一个示例 ecosystem.config.js

js
module.exports = {
  apps: [{
    name: 'app1',
    script: './app.js'
  }]
}

如果您正在创建自己的配置文件,请确保它以 .config.js 结尾,以便 PM2 能够将其识别为配置文件。

作用于配置文件

与对应用程序进行操作相比,您可以无缝地启动/停止/重新启动/删除配置文件中包含的所有应用程序:

bash
# 启动所有应用程序
pm2 start ecosystem.config.js

# 全部停止
pm2 stop ecosystem.config.js

# 重启所有
pm2 restart ecosystem.config.js

# 全部重新加载
pm2 reload ecosystem.config.js

# 删除所有
pm2 delete ecosystem.config.js

作用于特定过程

您还可以通过使用其名称和选项--only <app_name>来对特定应用程序进行操作:

bash
$ pm2 start ecosystem.config.js --only api-app

注意--only 选项也适用于启动/重启/停止/删除

您甚至可以通过指定以逗号分隔的每个应用程序名称来指定要操作的多个应用程序:

bash
$ pm2 start ecosystem.config.js --only "api-app,worker-app"

切换环境

您可以通过 env_* 选项指定不同的环境变量集。

例子:

js
module.exports = {
  apps: [{
    name: 'app1',
    script: './app.js',
    env_production: {
      NODE_ENV: 'production'
    },
    env_development: {
      NODE_ENV: 'development'
    }
  }]
}

现在要在不同环境中的变量之间切换,请指定 --env [env name] 选项:

bash
$ pm2 start process.json --env production
$ pm2 restart process.json --env development

可用的属性

可以使用以下属性微调应用程序行为和配置:

常规的

字段类型范例说明
name(string)“my-api”应用程序名称(默认为不带扩展名的脚本文件名)
script(string)”./api/app.js”相对于 pm2 start 的脚本路径
cwd(string)“/var/www/”您的应用程序将从中启动的目录
args(string)“-a 13 -b 12”包含通过 CLI 传递给脚本的所有参数的字符串
interpreter(string)“/usr/bin/python”解释器绝对路径(默认为节点)
interpreter_args(string)”–harmony”传递给口译员的选项
node_args(string)interpreter_args的别名

高级功能

字段类型范例说明
instancesnumber-1要启动的应用程序实例数
exec_modestringcluster启动应用程序的模式,可以是 clusterfork,默认为 fork
watchboolean or true启用监视和重启功能,如果文件夹或子文件夹中的文件发生更改,您的应用程序将重新加载
ignore_watchlist["[\/\\]\./", "node_modules"]通过监视功能忽略某些文件或文件夹名称的正则表达式列表
max_memory_restartstring150M如果超过指定的内存量,您的应用程序将重新启动。 人性化格式:可以是“10M”、“100K”、“2G”等等……
envobject{"NODE_ENV": "development", "ID": "42"}将出现在您的应用程序中的环境变量
env_object{"NODE_ENV": "production", "ID": "89"}在执行 pm2 restart app.yml --env 时注入
source_map_supportbooleantrue默认为true, 启用/禁用源映射文件
instance_varstringNODE_APP_INSTANCE参阅
filter_envarray of string[ “REACT_” ]排除以REACT_开头的全局变量,不允许它们渗透到集群中。

日志文件

字段类型范例说明
log_date_format(string)“YYYY-MM-DD HH:mm Z”日志日期格式(参见日志部分)
error_file(string)错误文件路径(默认为 $HOME/.pm2/logs/<app name>-error-<pid>.log)
out_file(string)输出文件路径(默认为 $HOME/.pm2/logs/<app name>-out-<pid>.log)
log_file(string)输出和错误日志的文件路径(默认禁用)
combine_logsbooleantrue如果设置为 true,避免使用进程 ID
merge_logsbooleantruecombine_logs 的别名
timebooleanfalse默认为假。 如果 true auto 日志带有 Date
pid_file(string)pid 文件路径(默认为 $HOME/.pm2/pids/<app name>-<pid>.pid)

控制流

字段类型范例说明
min_uptime(number)被视为已启动的应用程序的最短正常运行时间
listen_timeoutnumber8000如果应用程序没有监听,则强制重新加载之前的时间(以毫秒为单位)
kill_timeoutnumber1600发送 a final SIGKILL 之前的毫秒数时间
shutdown_with_messagebooleanfalse使用 process.send('shutdown') 而不是 process.kill(pid, SIGINT) 关闭应用程序
wait_readybooleanfalse不要重新加载等待监听事件,而是等待 process.send('ready')
max_restartsnumber10在您的应用程序被视为错误并停止重新启动之前,连续不稳定重新启动的次数(小于 1 秒间隔或通过 min_uptime 自定义时间)
restart_delaynumber4000重新启动崩溃的应用程序之前等待的时间(以毫秒为单位)。 默认为 0。
autorestartbooleanfalse默认情况下为true。 如果为 false,PM2 将不会在应用程序崩溃或和平结束时重新启动您的应用程序
cron_restartstring“1 0 * * *”一个 cron 模式来重启你的应用程序。 应用程序必须正在运行才能使 cron 功能正常工作
vizionbooleanfalse默认情况下为true。 如果为 false,PM2 将在没有 vizion 功能(版本控制元数据)的情况下启动
post_updatelist["npm install", "echo launching the app"]从 Keymetrics 仪表板执行拉取/升级操作后将执行的命令列表
forcebooleantrue默认为假。 如果为真,您可以多次启动同一个脚本,这通常是 PM2 不允许的

部署

条目名称说明类型默认
keySSH 密钥路径String$HOME/.ssh
userSSH 用户String
hostSSH主机[String]
ssh_options没有命令行标志的 SSH 选项,请参阅man sshString or [String]
refGIT远程/分支String
repoGIT远程String
path服务器中的路径String
pre-setup本地计算机上脚本的预设置命令或路径String
post-setup主机上的安装后命令或脚本路径String
pre-deploy-local预部署行动String
post-deploy部署后操作String

注意事项

使用 JSON 应用程序声明时传递的所有命令行选项都将被删除,即

CWD

cwd: 您的 JSON 声明不需要与您的脚本一起驻留。 如果您希望在脚本以外的位置维护 JSON(例如,/etc/pm2/conf.d/node-app.json),您将需要使用 cwd 功能(注意, 这对于使用符号链接的 capistrano 风格的目录结构非常有用)。 文件可以是相对于 cwd 目录的,也可以是绝对的(参见下面的示例)。

CLI/JSON 选项

所有键都可以在 JSON 配置文件中使用,但在命令行上几乎保持不变,例如:

bash
exec_mode         -> --execute-command
max_restarts      -> --max-restarts
force             -> --force

使用引号转译特殊字符,例如:

bash
$ pm2 start test.js --node-args "port=3001 sitename='first pm2 app'"

nodeArgs 参数将被解析为

json
[
  "port=3001",
  "sitename=first pm2 app"
]

但不是

json
[
  "port=3001",
  "sitename='first",
  "pm2",
  "app'"
]

禁用日志

您可以将 /dev/null 传递给 error_fileout_file 以禁用日志保存。 注意:启动 PM2 2.4.0/dev/nullNULL 独立于平台禁用日志。

日志后缀

您可以通过启用选项 merge_logs: true 来禁用日志上的自动 ID 后缀(例如 app-name-ID.log)

环境定义

您需要使用 --env <envname> 来告诉 pm2 使用进程文件中定义的特定环境:

json
{
  "apps": [{
    "name": "worker-app",
    "script": "./worker.js",
    "watch": true,
    "env": {
      "NODE_ENV": "development"
    },
    "env_production": {
      "NODE_ENV": "production"
    }
  }, {
    "name": "api-app",
    "script": "./api.js",
    "instances": 4,
    "exec_mode": "cluster"
  }]
}

在此示例中,您将运行pm2 start ecosystem.json,它将使用默认环境(在开发中)启动您的应用程序。

然后你使用 pm2 start ecosystem.json --env production 它将使用属性 env_<name>, 这里的 name 是 production,所以它会使用 NODE_ENV=production 启动你的应用程序。

特殊的 ext_type

  • min_uptime: min_uptime 的值可以是:
    • 号码 例如 "min_uptime": 3000 表示 3000 毫秒。
    • String 因此,我们使其简短且易于配置:hms,例如:"min_uptime":"1h" 表示一小时,"min_uptime": "5m" 表示五分钟,"min_uptime": "10s" 表示十秒(它们将转换为毫秒)。
  • max_memory_restart的值可以是:
    • 号码 例如 "max_memory_restart": 1024 表示 1024 字节(不是位)。
    • String 因此,我们使其简短且易于配置:GMK,例如:
      "max_memory_restart": "1G" 表示 1 GB,
      "max_memory_restart": "5M" 表示 5 MB,
      "max_memory_restart": "10K" 表示 10 KB(它们将被转换为字节)。
  • 可选值 例如 exec_mode 可以将 cluster (cluster_mode) 或 fork (fork_mode) 作为可能的值。
  • 须知
    • "instances": 0 表示 PM2 将根据 CPU 的数量启动尽可能多的进程(集群模式)
    • 数组 argsnode_argsignore_watch 可以是 Array 的类型
      (例如:"args": ["--toto=heya coco", "-d", "1"])或 string
      (例如:"args": "--to='heya coco' -d 1")