如何使用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]
获取第一个参数,依此类推。