如何使用pm2将parameter passing给应用程序?

我正在使用pm2来启动我的应用程序,但我无法将parameter passing给它。 我使用的命令是pm2 start app.js – dev。 虽然这与永远的工作。

你可以按照这张票的规定来做: https : //github.com/Unitech/pm2/issues/13

虽然如果你通过环境,你可能要考虑利用环境variables。 有了这个,你可以创build一个variables,这个variables可以被process.env.*任何进程访问。

所以你有一个configuration文件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"] } } } 

然后你导入你的configuration:

 var config=require('./config.json')[process.env.NODE_ENV || 'dev']; db.connect(config.db.hosts, config.db.database); 

然后你可以通过shell在你的环境中设置variables:

 export NODE_ENV=staging pm2 start app.js 

环境variables将持续与会话一样长的时间。 所以你必须在该用户的~/.bashrc文件中设置variables才能保留。 这将在每个会话中设置variables。

PM2有一个部署系统 ,允许你在每次应用程序被守护进程之前设置一个环境variables。 这就是POSIX系统中的守护进程通常如何使用参数,因为这些参数在进程中不会丢失。 鉴于你的情况,这可能不重要,但它是一个很好的做法。

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

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

 pm2 start myServer.js --node-args="--production --port=1337" 

编辑

你可以在-x --之后添加任何参数-x --

 pm2 start app.js -x -- --prod 

为deploymemt启动文档。

那么有两种方法可以在CLI中将参数从pm2传递给nodejs:

  • pm2 start app.js – dev –port = 1234(注意 – 和dev之间有一个额外的空间)
  • pm2 start app.js –node-args =“dev –port = 1234”

两种方式,你会发现这些值存在process.argv (['开发',' – 端口= 1234'])

从pm2文档

 //Inject what is declared in env_production $ pm2 start app.js --env production //Inject what is declared in env_staging $ pm2 restart app.js --env staging 

用这个过程来定义参数是可能的。

您可以使用args键在args定义一个新进程,如下所示:

 { name : 'my-service', script : './src/service.js', args : 'firstArg secondArg', }, { name : 'my-service-alternate', script : './src/service.js', args : 'altFirstArg altSecondArg', } 

在这里,这两个进程使用相同的文件( service.js ),但传递不同的参数。

请注意,这些参数是在service.js中处理的。 在我的情况下,我只是使用process.argv[2]获取第一个参数,依此类推。