如何使用pm2将参数传递给app?

use*_*581 61 node.js express forever pm2

我使用pm2启动我的应用程序,但我无法传递参数.我正在使用的命令是pm2 start app.js - dev.虽然这适用于永远.

Nis*_*ani 116

如果要从CLI传递节点参数,那么

pm2 start myServer.js --node-args="--production --port=1337"
Run Code Online (Sandbox Code Playgroud)

.

编辑

你可以添加任何参数 --

pm2 start app.js -- --prod
Run Code Online (Sandbox Code Playgroud)

deploymemt发布 docs文档.

  • 对于docker,您可以使用专用的PM2命令pm2-docker.更多信息:http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/ (3认同)
  • 根据http://pm2.keymetrics.io/docs/usage/quick-start/,你只需要添加 -- 之后的任何内容都将作为参数传递;不需要-x;-x 表示使用fork系统执行命令 (2认同)

tst*_*rzl 25

您可以按照此票证中的说明进行操作:https://github.com/Unitech/pm2/issues/13

虽然如果您正在通过环境,您可能需要考虑利用环境变量.通过这种方式,您可以创建一个变量,该变量可以由该环境中的任何进程访问process.env.*.

所以你有一个配置文件config.json:

{
   "dev": {
        "db": {
            "hosts":["localhost"],
            "database": "api"
        },
        "redis": {
            "hosts": ["localhost"]
        }
   },
   "staging": {
        "db": {
            "hosts":["1.1.1.1"],
            "database": "api"
        },
        "redis": {
            "hosts": ["2.2.2.2"]
        }
   },
   "production": {
        "db": {
            "hosts":["1.1.1.1", "1.1.1.2", "1.1.1.3"],
            "database": "api"
        },
        "redis": {
            "hosts": ["2.2.2.2", "2.2.2.3"]
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

然后导入配置:

var config=require('./config.json')[process.env.NODE_ENV || 'dev'];

db.connect(config.db.hosts, config.db.database);
Run Code Online (Sandbox Code Playgroud)

然后,您将通过shell在您的环境中设置变量:

export NODE_ENV=staging
pm2 start app.js
Run Code Online (Sandbox Code Playgroud)

环境变量将持续与您的会话一样长.因此,您必须在该~/.bashrc用户的文件中设置该变量才能保留.这将在每个会话中设置变量.

PM2有一个部署系统,允许您在每次应用程序被守护之前设置环境变量.这就是POSIX系统中守护进程通常采用参数的方式,因为这些参数不会随进程丢失.鉴于你的情况可能并不重要,但这是一个很好的做法.

此外,您应该考虑在本地停止/启动,并尽可能重新启动(如果处于群集模式)以防止在生产中停机.


Tra*_*vis 14

可以使用该过程定义参数.

您可以ecosystem.config.js使用args键定义新进程,如下所示:

{
  name            : 'my-service',
  script          : './src/service.js',
  args            : 'firstArg secondArg',
},
{
  name            : 'my-service-alternate',
  script          : './src/service.js',
  args            : 'altFirstArg altSecondArg',
}
Run Code Online (Sandbox Code Playgroud)

这里,两个进程使用相同的file(service.js),但是向它传递不同的参数.

请注意,这些参数在其中处理service.js.在我的情况下,我只是习惯process.argv[2]得到第一个参数,依此类推.


jun*_*yea 13

我已经测试过了,它可以在我的 Windows 机器上运行。下面是使用 pm2 将参数传递给 Nodejs 应用程序的完整解决方案。

** 还有两种类型的参数

  1. node-args - 在 npm 启动之前使用
  2. args - 在您的节点程序中使用

有 2 种方法可以通过 pm2 传递参数。

选项 1:使用 pm2 命令传递参数。

选项 2:使用配置文件,例如 Ecosystem.config.js

选项 1(通过命令传递 arg):

pm2 start app/myapp1.js --node-args="--max-http-header-size=80000" -- arg1 arg2
Run Code Online (Sandbox Code Playgroud)
//Access the arg as below in your node program.
console.log(process.argv[2]); // arg1
console.log(process.argv[3]); // arg2
Run Code Online (Sandbox Code Playgroud)

选项 2(使用配置文件): 如果您使用的是Ecosystem.config.js。您可以使用以下配置来定义:

    {
      name: 'my-app',
      script: 'app\\myapp1.js',
      env: {
        NODE_ENV: 'DEV',
        PORT : 5051
      },
      node_args: '--max-http-header-size=80000',
      args : 'arg1 arg2',
      instances: 1,
      exec_mode: 'fork'
    }
Run Code Online (Sandbox Code Playgroud)

以开发模式启动:

pm2 start --name myapp  app/myapp1.js -- .\ecosystem.config.js
Run Code Online (Sandbox Code Playgroud)

要以生产模式启动,只需添加 --env=development

pm2 start --name myapp  app/myapp1.js -- .\ecosystem.config.js --env=production 
Run Code Online (Sandbox Code Playgroud)
//Access the arg as below in your node program.
console.log(process.argv[2]); // arg1
console.log(process.argv[3]); // arg2
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 5

您可以通过传递参数将脚本发送到脚本--.例如:pm2 start app.js -i max -- -a 23 // Pass arguments after -- to app.js