servidor servicio produccion procesos nodejs node gestor node.js express forever pm2

node.js - servicio - ¿Cómo pasar argumentos a la aplicación usando pm2?



pm2 startup windows (6)

Estoy usando pm2 para iniciar mi aplicación, pero no puedo pasarle argumentos. el comando que estoy usando es pm2 start app.js - dev. Aunque esto funciona para siempre.


Bien, hay dos maneras en que puede hacer para pasar los parámetros de pm2 a nodejs en CLI:

  • pm2 start app.js - dev --port = 1234 (tenga en cuenta que hay un espacio adicional entre - y dev)
  • pm2 start app.js --node-args = "dev --port = 1234"

En ambos sentidos, encontrará que estos valores existen en process.argv ([''dev'', ''- port = 1234''])


De los documentos 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


Es posible definir argumentos con el proceso.

Puede definir un nuevo proceso en ecosystem.config.js con una clave args , así:

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

Aquí, los dos procesos usan el mismo archivo ( service.js ), pero le pasan diferentes argumentos.

Tenga en cuenta que estos argumentos se manejan dentro de service.js . En mi caso, acabo de utilizar process.argv[2] para obtener el primer argumento, y así sucesivamente.


Puede enviar argumentos a su script pasándolos después de -- . Por ejemplo: pm2 start app.js -i max -- -a 23 // Pass arguments after -- to app.js


Puede hacer lo que se indica en este ticket: https://github.com/Unitech/pm2/issues/13

Sin embargo, si está pasando por el entorno es posible que desee considerar el aprovechamiento de las variables de entorno. Con esto creas una variable a la que se puede acceder mediante cualquier proceso en ese entorno con process.env.* .

Entonces tienes un archivo de configuración 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"] } } }

Luego importas tu configuración:

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

Luego configuraría la variable en su entorno a través de shell:

export NODE_ENV=staging pm2 start app.js

La variable de entorno durará tanto como su sesión. Por lo tanto, tendrá que establecerlo en el archivo ~/.bashrc para que el usuario la persista. Esto establecerá la variable en cada sesión.

PM2 tiene un sistema de implementación que le permite establecer una variable de entorno cada vez antes de que su aplicación sea daemonizada. Así es como los daemons en los sistemas POSIX típicamente toman parámetros, porque esos parámetros no se pierden con el proceso. Dado con su circunstancia, podría no importar tanto, pero es una buena práctica.

Además, debe considerar detener / iniciar localmente y reiniciar (si está en el modo de clúster) siempre que sea posible para evitar el tiempo de inactividad durante la producción.


Si desea pasar argumentos de nodo desde CLI, entonces

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

.

Editado

puede agregar cualquier argumento después --

pm2 start app.js -- --prod

Velas documentos para deploymemt .