Ich verwende pm2, um meine App zu starten, kann jedoch kein Argument an sie übergeben. Der Befehl, den ich verwende, ist pm2 start app.js - dev. Obwohl dies für immer funktioniert.
Ich verwende pm2, um meine App zu starten, kann jedoch kein Argument an sie übergeben. Der Befehl, den ich verwende, ist pm2 start app.js - dev. Obwohl dies für immer funktioniert.
Antworten:
Sie können wie in diesem Ticket angegeben vorgehen: https://github.com/Unitech/pm2/issues/13
Wenn Sie die Umgebung übergeben, sollten Sie möglicherweise Umgebungsvariablen nutzen. Damit erstellen Sie eine Variable, auf die jeder Prozess in dieser Umgebung mit zugreifen kann process.env.*
.
Sie haben also eine Konfigurationsdatei 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"]
}
}
}
Dann importieren Sie Ihre Konfiguration:
var config=require('./config.json')[process.env.NODE_ENV || 'dev'];
db.connect(config.db.hosts, config.db.database);
Dann würden Sie die Variable in Ihrer Umgebung über die Shell festlegen:
export NODE_ENV=staging
pm2 start app.js
Die Umgebungsvariable hält so lange wie Ihre Sitzung. Sie müssen es also in der ~/.bashrc
Datei für diesen Benutzer festlegen, damit die Variable bestehen bleibt. Dadurch wird die Variable bei jeder Sitzung festgelegt.
PM2 verfügt über ein Bereitstellungssystem, mit dem Sie jedes Mal eine Umgebungsvariable festlegen können, bevor Ihre App dämonisiert wird. Auf diese Weise nehmen Daemons in POSIX-Systemen normalerweise Parameter an, da diese Parameter beim Prozess nicht verloren gehen. Angesichts Ihrer Umstände ist es vielleicht nicht so wichtig, aber es ist eine gute Praxis.
Darüber hinaus sollten Sie in Betracht ziehen, lokal zu stoppen / zu starten und nach Möglichkeit neu zu starten (falls im Cluster-Modus), um Ausfallzeiten in der Produktion zu vermeiden.
Wenn Sie Knotenargumente von der CLI übergeben möchten, dann
pm2 start myServer.js --node-args="--production --port=1337"
.
Bearbeitet
Sie können nachher beliebige Argumente hinzufügen --
pm2 start app.js -- --prod --second-arg --third-arg
Sails docs für deploymemt .
args
undnode-args
Es ist möglich, Argumente mit dem Prozess zu definieren.
Sie können einen neuen Prozess ecosystem.config.js
mit einem args
Schlüssel wie folgt definieren:
{
name : 'my-service',
script : './src/service.js',
args : 'firstArg secondArg',
},
{
name : 'my-service-alternate',
script : './src/service.js',
args : 'altFirstArg altSecondArg',
}
Hier verwenden die beiden Prozesse dieselbe Datei ( service.js
), übergeben ihr jedoch unterschiedliche Argumente.
Beachten Sie, dass diese Argumente in behandelt werden service.js
. In meinem Fall habe ich nur process.argv[2]
das erste Argument bekommen und so weiter.
ecosystem.config.js
. Wie zum Beispielpm2 start ecosystem.config.js
Nun, es gibt zwei Möglichkeiten, wie Sie die Parameter von pm2 an nodejs in der CLI übergeben können:
In beiden Fällen finden Sie diese Werte in process.argv
(['dev', '- port = 1234'])
Sie müssen pm2 wie folgt starten: pm2 start app.js --name "app_name" - arg1 arg2
Dann können Sie in Ihrem Code Ihre Argumente abrufen mit: console.log (process.argv);
process.argv ist eine Liste wie diese: ['/ usr / local / bin / node', '/usr/local/lib/node_modules/pm2/lib/ProcessContainerFork.js', 'arg1', 'arg2']
Ich habe getestet und es funktioniert in meinem Windows-Computer. Unten finden Sie die vollständige Lösung zum Übergeben von Argumenten an die nodejs-App mit pm2.
** Es gibt auch zwei Arten von Argumenten
Es gibt zwei Möglichkeiten, Argumente mit pm2 zu übergeben.
Option 1: Argument mit pm2-Befehlen übergeben.
Option 2: Verwenden Sie die Konfigurationsdatei, z. B. ökosystem.config.js
Option 1 (arg durch Befehle übergeben):
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
Option 2 (Konfigurationsdatei verwenden): Wenn Sie ökosystem.config.js verwenden . Sie können mit folgender Konfiguration definieren:
{
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'
}
So starten Sie als Entwicklungsmodus:
pm2 start --name myapp app/myapp1.js -- .\ecosystem.config.js
Um als Produktionsmodus zu starten, fügen Sie einfach --env = Produktion hinzu
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
Ich verwende immer PM2, um meine Python-Skripte in einer Linux-Umgebung auszuführen. Stellen Sie sich also vor, ein Skript hat einen einzelnen Parameter und muss nach einiger Zeit kontinuierlich ausgeführt werden. Dann können wir es folgendermaßen übergeben:
pm2 start <filename.py> --name <nameForJob> --interpreter <InterpreterName> --restart-delay <timeinMilliseconds> -- <param1> <param2>
filename.py
ist Name des Python-Skripts, ohne <> Symbole, ich möchte mit PM2 ausführen
nameForJob
ist der aussagekräftige Name für den Job, ohne <> Symbole
InterpreterName
ist der Python-Interpreter zum Ausführen von Skripten, normalerweise ist es unter python3
Linux
timeinMilliseconds
die Zeit, die unser Skript benötigt Warten und erneut ausführen
param1
ist der erste Parameter für das Skript
param2
ist der zweite Parameter für das Skript.