Ich habe einen node.js-Server unter osx installiert und verwende ihn. Ich habe ein Chat-Modul erstellt und führe es gerne aus. Ich habe einige Teile geändert und muss den Server neu starten, um die Auswirkungen zu sehen.
Ich kann nur neu starten, indem ich das Terminalfenster schließe, es wieder öffne und dann den Knoten chatdemo.js erneut ausführe.
Wie kann ich neu starten, ohne das Terminal zu schließen?
Vielen Dank.
forever restart
Antworten:
Wenn es nur läuft (kein Daemon), dann benutze einfach
Ctrl-C
.Wenn es daemonisiert ist, können Sie versuchen:
$ ps aux | grep node you PID 1.5 0.2 44172 8260 pts/2 S 15:25 0:00 node app.js $ kill -2 PID
Wo
PID
wird durch die Nummer in der Ausgabe von ersetztps
.quelle
nohup node server.js &
Während der Entwicklung können Sie den Server am besten neu starten, um die vorgenommenen Änderungen anzuzeigen. Verwenden Sie dazu nodemon
nodemon überwacht die Dateien in dem Verzeichnis, in dem nodemon gestartet wurde. Wenn sie sich ändern, wird Ihre Knotenanwendung automatisch neu gestartet.
Überprüfen Sie das Nodemon Git Repo: https://github.com/remy/nodemon
quelle
In diesem Fall starten Sie Ihren node.js-Server häufig neu, da er sich in der aktiven Entwicklung befindet und Sie ständig Änderungen vornehmen. Es gibt ein großartiges Hot-Reload- Skript, das dies für Sie erledigt, indem es alle Ihre .js-Dateien überwacht und Ihren node.js-Server neu startet, wenn sich eine dieser Dateien geändert hat. Nur das Ticket für schnelle Entwicklung und Test.
Das Skript und die Erklärung zur Verwendung finden Sie hier bei Draco Blue .
quelle
Ich hatte das gleiche Problem und schrieb dann dieses Shell-Skript, das alle vorhandenen Knotenprozesse beendet:
#!/bin/bash echo "The following node processes were found:" ps aux | grep " node " | grep -v grep nodepids=$(ps aux | grep " node " | grep -v grep | cut -c10-15) echo "OK, so we will stop these process/es now..." for nodepid in ${nodepids[@]} do echo "Stopping PID :"$nodepid kill -9 $nodepid done echo "Done"
Nachdem dies als Shell-Skriptdatei (xxx.sh) gespeichert wurde, möchten Sie es möglicherweise wie hier beschrieben zu Ihrem PATH hinzufügen .
(Bitte beachten Sie, dass dadurch alle Prozesse mit dem Namen "node" außer dem von grep beendet werden. In einigen Fällen werden möglicherweise auch andere Prozesse mit einem ähnlichen Namen beendet.)
quelle
cut -c17-20
pkill node
?"Nodemon" zu sagen würde die Frage beantworten.
Aber wie man nur (alle) Knotendämonen tötet, funktioniert für mich wie folgt:
quelle
Ich verstehe, dass sich mein Kommentar auf Windows bezieht, aber möglicherweise ist jemand nützlich. Für den Gewinnlauf in cmd:
wmic process where "commandline like '%my_app.js%' AND name='node.exe' " CALL Terminate
Dann können Sie Ihre App erneut ausführen:
Sie können es auch in Batch-Dateien mit Anführungszeichen verwenden:
wmic process where "commandline like '%%my_app.js%%' AND name='node.exe' " CALL Terminate node my_app.js
quelle
Die Verwendung von "kill -9 [PID]" oder "killall -9 node" hat bei mir funktioniert, während "kill -2 [PID]" nicht funktioniert hat.
quelle
Wenn ich die Knoten-App nur über die Konsole ausführe (nicht für immer usw.), verwende ich Strg + C. Ich bin mir nicht sicher, ob OSX dieselbe Tastenkombination zum Beenden hat, aber viel schneller als die Prozess-ID zu finden und zu beenden. Sie können auch die hinzufügen Folgen Sie dem Code für die Chat-App, die Sie verwenden, und geben Sie "exit" in die Konsole ein, wenn Sie die App schließen möchten.
process.stdin.resume(); process.stdin.setEncoding('utf8'); process.stdin.on('data', function(data) { if (data == 'exit\n') process.exit(); });
quelle
Öffnen Sie zuerst das Terminal / die Befehlszeile und wechseln Sie dann in Ihr Projektverzeichnis. Installieren Sie nun nodemon mit dem Befehl npm install nodemon --save-dev. Dieser Befehl stellt sicher, dass er als Entwicklerabhängigkeit gespeichert wird. Wenn Sie mit expressjs arbeiten, sieht es in Ihrer Paketdatei so aus
{ "name": "expressjs-app", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "cookie-parser": "~1.4.4", "debug": "~2.6.9", "express": "~4.16.1", "http-errors": "~1.6.3", "morgan": "~1.9.1", "pug": "^2.0.4" }, "devDependencies": { "nodemon": "^2.0.3" } }
Ändern Sie jetzt den Wert "start" in Ihrer Datei package.json. Für die Produktion verwenden wir den Exititing-Wert, für die Entwicklung verwenden wir nodemon, um die Änderungen in der Quelldatei zu verfolgen, ohne den Server neu zu starten. Dort für neuen Wert für Start ist "Start": "wenn [[$ NODE_ENV == 'Produktion']]; dann Knoten ./bin/www; sonst Knoten ./bin/www; fi"
Die endgültige Datei package.json sieht folgendermaßen aus
{ "name": "expressjs-app", "version": "0.0.0", "private": true, "scripts": { "start": "if [[$NODE_ENV=='production']]; then node ./bin/www; else nodemon ./bin/www; fi" }, "dependencies": { "cookie-parser": "~1.4.4", "debug": "~2.6.9", "express": "~4.16.1", "http-errors": "~1.6.3", "morgan": "~1.9.1", "pug": "^2.0.4" }, "devDependencies": { "nodemon": "^2.0.3" } }
Um nodemon jusy zu deinstallieren, führen Sie einfach den Befehl npm uninstall nodemon aus
quelle