开始新进程时

启动新进程时,PM2 将按以下顺序注入环境:

  • 首先,PM2 CLI 将使用其环境,因此将注入 shell 的当前环境。
  • 然后 PM2 将注入您可以使用生态系统文件配置的环境:
module.exports = {
  apps : [
      {
        name: "myapp",
        script: "./app.js",`
        watch: true,`
        env: {
          "NODE_ENV": "development",
        }
      }
  ]
}

这里可以看到 PM2 会覆盖当前环境添加NODE_ENV=development. 但您也可以像这样定义不同的环境:

module.exports = {
  apps : [
      {
        name: "myapp",
        script: "./app.js",
        watch: true,
        env: {
            "PORT": 3000,
            "NODE_ENV": "development"
        },
        env_production: {
            "PORT": 80,
            "NODE_ENV": "production",
        }
      }
  ]
}

默认环境使用env,但你可以通过使用 pm2 start ecosystem.config.js --env production 启动命令,来指定使用 env_production 配置

您可以根据情况定义很多的环境,请记住,必须传递使用 --env 指定环境名称 配合 env_ 配置一起使用。

具体环境变量

NODE_APP_INSTANCE(最低 PM2 2.5)

有一个NODE_APP_INSTANCE环境变量用于区分进程,例如你可能只想在一个进程上运行一个 cronjob,你可以只检查 if process.env.NODE_APP_INSTANCE === '0'pm2 restart 两个进程永远不能有相同的数字,在和命令之后仍然如此 pm2 scale

您可能对node-config 的名称有疑问NODE_APP_INSTANCE,因此您可以使用instance_var选项重命名它:

module.exports = {
apps : [
{
name: “myapp”,
script: “./app.js”,
watch: true,
instance_var: ‘INSTANCE_ID’,
env: {
“PORT”: 3000,
“NODE_ENV”: “development”
}
}
]
}

在这种情况下,变量将具有相同的行为,但将位于process.env.INSTANCE_ID.

increment_var(最小 PM2 2.5)

有一个选项要求 PM2 为每个启动的实例增加一个环境变量,例如:

module.exports = {
  apps : [
      {
        name: "myapp",
        script: "./app.js",
        instances: 2,
        exec_mode: "cluster",
        watch: true,
        increment_var : 'PORT',
        env: {
            "PORT": 3000,
            "NODE_ENV": "development"
        }
      }
  ]
}

在这个例子中,如果我运行 pm2 start ecosystem.config.js:

  • PM2 会看到我想PORT为每个实例增加变量
  • 它会看到我已经将默认值定义为3000
  • 第一个实例将有process.env.PORT = 3000第二个process.env.PORT = 3001

注意:当使用 缩放时它也会增加pm2 scale myapp 4,两个新实例都将具有30023003作为PORT变量。

作者:Jeebiz  创建时间:2023-02-25 22:27
最后编辑:Jeebiz  更新时间:2023-02-26 22:38