373 Stimmen

Node.js-Programm von der Kommandozeile aus stoppen

Ich habe einen einfachen TCP-Server, der auf einen Port wartet.

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!\n");
});

server.listen(7777);

Ich beginne es mit node server.js und schließe es dann mit Strg + Z auf dem Mac. Wenn ich versuche, es erneut mit node server.js Ich erhalte diese Fehlermeldung:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)

Schließe ich das Programm auf die falsche Weise? Wie kann ich dies verhindern?

8voto

Siddhant Senapati Punkte 101

Für MacOS

  1. Terminal öffnen
  2. Führen Sie den folgenden Code aus und drücken Sie die Eingabetaste

     sudo kill $(sudo lsof -t -i:4200)

6voto

Die Antwort kommt zwar spät, aber ich habe das hier von NodeJS-Dokumente :

Das 'exit'-Ereignis wird ausgelöst, wenn die REPL entweder durch den Empfang des .exit Befehl als Eingabe, der Benutzer drückt <ctrl>-C zweimal, um SIGINT zu signalisieren, oder durch Drücken von <ctrl>-D um "Ende" auf dem Eingabestrom zu signalisieren. Der Listener-Callback wird ohne Argumente aufgerufen.

Zusammenfassend kann man also sagen, dass man damit aussteigen kann:

  1. Tippen .exit in der nodejs REPL.
  2. Drücken Sie <ctrl>-C zweimal.
  3. drücken. <ctrl>-D .
  4. process.exit(0) was einen natürlichen Ausstieg aus REPL bedeutet. Wenn Sie einen anderen Status zurückgeben möchten, können Sie eine Zahl ungleich Null zurückgeben.
  5. process.kill(process.pid) ist die Art und Weise zu töten mit nodejs api aus Ihrem Code oder von REPL.

6voto

Decoded Punkte 944

Ich füge diese Antwort hinzu, weil wir für viele Projekte mit Produktionsbereitstellungen Skripte haben, die diese Prozesse stoppen, damit wir das nicht tun müssen.

Eine saubere Art, Ihre Node-Server-Prozesse zu verwalten, ist die Verwendung der forever Paket (von NPM ).

Beispiel:

Für immer installieren

npm install forever -g

Node Server ausführen

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

Ergebnis:

info: Forever processing file: server.js

Node Server herunterfahren

forever stop server.js

Ergebnis

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247

Damit wird Ihre Server-Anwendung sauber heruntergefahren.

5voto

BigEgg Punkte 101

Wenn Sie Ihren Server mit npm stop oder etwas in dieser Art. Sie können den Code, der Ihren Serverprozess beendet, so schreiben:

require('child_process').exec(`kill -9 ${pid}`)

Unter diesem Link finden Sie weitere Informationen: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5

3voto

bapin93 Punkte 130

Ich bin auf ein Problem gestoßen, bei dem ich Server mit mehreren Knoten laufen, und ich möchte einfach einen von ihnen töten und setzen Sie es über ein Skript neu ein.

Hinweis: Dieses Beispiel läuft in einer Bash-Shell auf dem Mac.

Dabei achte ich darauf, dass meine node so konkret wie möglich anrufen. Zum Beispiel statt des Aufrufs node server.js aus dem Verzeichnis apps, rufe ich node app_name_1/app/server.js

Dann kann ich ihn damit töten:

kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')

Damit wird nur der Node-Prozess beendet, der app_name_1/app/server.js ausführt.

Wenn Sie die node app_name_2/app/server.js wird dieser Knotenprozess weiterlaufen.

Wenn Sie sie alle töten wollen, können Sie killall node wie andere bereits erwähnt haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X