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.
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
--
Sails docs für deploymemt .
quelle
args
undnode-args
Es ist möglich, Argumente mit dem Prozess zu definieren.
Sie können einen neuen Prozess
ecosystem.config.js
mit einemargs
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 nurprocess.argv[2]
das erste Argument bekommen und so weiter.quelle
ecosystem.config.js
. Wie zum Beispielpm2 start ecosystem.config.js
Sie können Argumente an Ihr Skript senden, indem Sie sie anschließend übergeben
--
. Zum Beispiel:pm2 start app.js -i max -- -a 23 // Pass arguments after -- to app.js
quelle
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'])quelle
Aus den pm2- Dokumenten
//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
quelle
Sie können Argumente für den Knoten einfach so übergeben:
NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_ENV=dev pm2 start server.js --name web-server
quelle
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']
quelle
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:
Um als Produktionsmodus zu starten, fügen Sie einfach --env = Produktion hinzu
//Access the arg as below in your node program. console.log(process.argv[2]); // arg1 console.log(process.argv[3]); // arg2
quelle
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:
filename.py
ist Name des Python-Skripts, ohne <> Symbole, ich möchte mit PM2 ausführennameForJob
ist der aussagekräftige Name für den Job, ohne <> SymboleInterpreterName
ist der Python-Interpreter zum Ausführen von Skripten, normalerweise ist es unterpython3
LinuxtimeinMilliseconds
die Zeit, die unser Skript benötigt Warten und erneut ausführenparam1
ist der erste Parameter für das Skriptparam2
ist der zweite Parameter für das Skript.quelle