我正在使用pm2启动我的应用程序,但无法将参数传递给它。我正在使用的命令是pm2 start app.js-dev。尽管这永远有效。
Answers:
您可以按照此票证所述进行操作: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"]
}
}
}
然后,您导入配置:
var config=require('./config.json')[process.env.NODE_ENV || 'dev'];
db.connect(config.db.hosts, config.db.database);
然后,您将通过shell在您的环境中设置变量:
export NODE_ENV=staging
pm2 start app.js
环境变量将持续到您的会话。因此,您必须在该~/.bashrc
用户的文件中设置它,变量才能持久。这将在每个会话中设置变量。
PM2具有一个部署系统,该系统可让您每次在应用程序被守护之前设置一个环境变量。这就是POSIX系统中守护程序通常采用参数的方式,因为这些参数不会随过程丢失。考虑到您的情况,它可能无关紧要,但它是一种很好的做法。
此外,您应该考虑在本地停止/启动,并在可能的情况下尽可能重新启动(如果处于群集模式),以防止生产中的停机时间。
如果要从CLI传递节点参数,则
pm2 start myServer.js --node-args="--production --port=1337"
。
已编辑
您可以在之后添加任何参数 --
pm2 start app.js -- --prod --second-arg --third-arg
航行有关deploymemt的文档。
args
和node-args
可以在过程中定义参数。
您可以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',
}
在这里,两个进程使用相同的文件(service.js
),但是将不同的参数传递给该文件。
请注意,这些参数在中处理service.js
。就我而言,我只是用来process.argv[2]
获取第一个参数,依此类推。
ecosystem.config.js
。例如pm2 start ecosystem.config.js
我总是使用PM2在Linux环境中运行python脚本。因此,考虑到脚本具有单个参数,并且需要一段时间才能连续运行,那么我们可以像这样传递它:
pm2 start <filename.py> --name <nameForJob> --interpreter <InterpreterName> --restart-delay <timeinMilliseconds> -- <param1> <param2>
filename.py
是python脚本的名称,不带<>符号,我要使用PM2运行
nameForJob
是该作业的有意义的名称,不带<>符号
InterpreterName
是用于运行脚本的python解释器,通常是python3
在linux中,这是
timeinMilliseconds
我们脚本需要的时间等待并再次运行
param1
是脚本的第一个参数,脚本
param2
的第二个参数。
我已经测试过了,并且可以在Windows机器上运行。以下是使用pm2将参数传递给nodejs应用程序的完整解决方案。
**还有两种类型的参数
有两种方法可以通过pm2传递参数。
选项1:使用pm2命令传递参数。
选项2:通过使用配置文件,例如生态系统.config.js
选项1(通过命令传递arg):
pm2 start app/myapp1.js --node-args="--max-http-header-size=80000" -- arg1 arg2
//Access the arg as below in your node program.
console.log(process.argv[2]); // arg1
console.log(process.argv[3]); // arg2
选项2(使用配置文件): 如果您正在使用生态系统.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'
}
要以开发人员模式启动:
pm2 start --name myapp app/myapp1.js -- .\ecosystem.config.js
要以生产模式启动,只需添加--env = production
pm2 start --name myapp app/myapp1.js -- .\ecosystem.config.js --env=production
//Access the arg as below in your node program.
console.log(process.argv[2]); // arg1
console.log(process.argv[3]); // arg2