生态系统文件

配置文件

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

生成配置

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

$ pm2 init simple

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

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

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

对配置文件进行操作

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

# Start all applications
pm2 start ecosystem.config.js

# Stop all
pm2 stop ecosystem.config.js

# Restart all
pm2 restart ecosystem.config.js

# Reload all
pm2 reload ecosystem.config.js

# Delete all
pm2 delete ecosystem.config.js

对特定进程进行操作

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

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

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

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

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

切换环境

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

示例

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

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

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

可用属性

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

通用

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

高级功能

字段 类型 示例 描述
instances 数字 -1 要启动的应用程序实例数
exec_mode 字符串 “cluster” 启动应用程序的模式,可以是“cluster”或“fork”,默认为 fork
watch 布尔值或 [] true 启用监视和重启功能,如果文件夹或子文件夹中的文件发生更改,您的应用程序将重新加载
ignore_watch 列表 [”[\/\\]\./”, “node_modules”] 要忽略的某些文件或文件夹名称的正则表达式列表,由监视功能提供
max_memory_restart 字符串 “150M” 如果您的应用程序超过指定的内存量,它将重新启动。人性化格式:可以是“10M”、“100K”、“2G”等等……
env 对象 {“NODE_ENV”: “development”, “ID”: “42”} 将出现在您的应用程序中的环境变量
env_ 对象 {“NODE_ENV”: “production”, “ID”: “89”} 注入当执行 pm2 restart app.yml --env 时
appendEnvToName 布尔值 true 默认为 false。用于在单个服务器上部署多个环境。它会将每个环境附加到名称。例如)my-api-production
source_map_support 布尔值 true 默认为 true,[启用/禁用源映射文件]
instance_var 字符串 “NODE_APP_INSTANCE” 请参阅文档
filter_env 字符串数组 [ “REACT_” ] 排除以“REACT_”开头的全局变量,并且不允许它们渗透到集群中。

日志文件

字段 类型 示例 描述
log_date_format (字符串) “YYYY-MM-DD HH:mm Z” 日志日期格式(请参阅日志部分)
error_file (字符串)   错误文件路径(默认为 $HOME/.pm2/logs/<app name>-error-<pid>.log)
out_file (字符串)   输出文件路径(默认为 $HOME/.pm2/logs/<app name>-out-<pid>.log)
log_file (字符串)   输出和错误日志的文件路径(默认情况下禁用)
combine_logs 布尔值 true 如果设置为 true,则避免在日志文件名后缀进程 ID
merge_logs 布尔值 true combine_logs 的别名
time 布尔值 false 默认为 false。如果为 true,则自动在日志前缀日期
pid_file (字符串)   pid 文件路径(默认为 $HOME/.pm2/pids/<app name>-<pid>.pid)

控制流

字段 类型 示例 描述
min_uptime (数字)   应用程序被认为已启动的最短正常运行时间
listen_timeout 数字 8000 如果应用程序未侦听,则在强制重新加载之前的超时时间(以毫秒为单位)
kill_timeout 数字 1600 在发送 最终 SIGKILL 之前的超时时间(以毫秒为单位)
shutdown_with_message 布尔值 false 使用 process.send('shutdown') 而不是 process.kill(pid, SIGINT) 关闭应用程序
wait_ready 布尔值 false 不是重新加载等待侦听事件,而是等待 process.send('ready')
max_restarts 数字 10 在您的应用程序被认为出错并停止重新启动之前连续不稳定重新启动的次数(小于 1 秒的间隔或通过 min_uptime 自定义的时间)
restart_delay 数字 4000 重新启动崩溃的应用程序之前等待的时间(以毫秒为单位)。默认为 0。
autorestart 布尔值 false 默认为 true。如果为 false,则如果您的应用程序崩溃或正常结束,PM2 将不会重新启动它
cron_restart 字符串 “1 0 * * *” 用于重新启动应用程序的 cron 模式。应用程序必须正在运行才能使 cron 功能正常工作
vizion 布尔值 false 默认为 true。如果为 false,则 PM2 将在没有 vizion 功能(版本控制元数据)的情况下启动
post_update 列表 [“npm install”, “echo launching the app”] 在您从 Keymetrics 仪表板执行拉取/升级操作后将执行的命令列表
force 布尔值 true 默认为 false。如果为 true,您可以多次启动同一个脚本,这通常是不允许的 PM2

部署

条目名称 描述 类型 默认值
key SSH 密钥路径 字符串 $HOME/.ssh
user SSH 用户 字符串  
host SSH 主机 [字符串]  
ssh_options 没有命令行标志的 SSH 选项,请参阅“man ssh” 字符串或 [字符串]  
ref GIT 远程/分支 字符串  
repo GIT 远程 字符串  
path 服务器上的路径 字符串  
pre-setup 预设命令或本地机器上脚本的路径 字符串  
post-setup 后置设置命令或主机上脚本的路径 字符串  
pre-deploy-local 预部署操作 字符串  
post-deploy 后部署操作 字符串  

注意事项

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

CWD

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

CLI/JSON 选项

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

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

使用引号进行转义,例如

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

nodeArgs 参数将被解析为

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

但不是

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

禁用日志

您可以将 /dev/null 传递给 error_file 或 out_file 以禁用日志保存。注意:从 PM2 2.4.0 开始,/dev/nullNULL 禁用日志,而与平台无关。

日志后缀

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

环境定义

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

{
  "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 毫秒。
    • 字符串 因此,我们使其配置起来简短易懂:hms,例如:"min_uptime": "1h" 表示一小时,"min_uptime": "5m" 表示五分钟,"min_uptime": "10s" 表示十秒(这些将被转换为毫秒)。
  • max_memory_restart max_memory_restart 的值可以是
    • 数字 例如 "max_memory_restart": 1024 表示 1024 字节(不是位)。
    • 字符串 因此,我们使其配置起来简短易懂: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"
为此页面做出贡献