it-swarm.com.de

Wie kann eine node.js-Anwendung dauerhaft ausgeführt werden?

Auf einem Debian-Server habe ich Node.js installiert. Ich verstehe, wie man eine App von PuTTY mit dieser Befehlszeile startet:

node /srv/www/MyUserAccount/server/server.js

und rufen Sie die Adresse 50.51.52.53:8080 (IP und Port) auf.

Aber sobald ich PuTTY schließe, kann ich die Adresse 50.51.52.53:8080 nicht mehr erreichen.

Wie kann eine Node.js-Anwendung dauerhaft ausgeführt werden?

Wie Sie sich vorstellen können, bin ich ein Anfänger von Linux und Node.js.

207
Sam

Obwohl die anderen Antworten das OP-Problem lösen, sind sie alle übertrieben und erklären nicht, warum er oder sie dieses Problem hat.

Der Schlüssel ist diese Zeile "Ich schließe PuTTY, dann kann ich die Adresse nicht erreichen"

Wenn Sie bei PuTTY bei Ihrem Remote-Host angemeldet sind, haben Sie einen SSH-Linux-Prozess gestartet, und alle von dieser SSH-Sitzung eingegebenen Befehle werden als Kinder dieses Prozesses ausgeführt. 

Ihr Problem ist, dass Sie beim Beenden von PuTTY die SSH-Sitzung beenden, wodurch der Prozess und alle aktiven untergeordneten Prozesse beendet werden. Wenn Sie PuTTY schließen, beenden Sie versehentlich Ihren Server, weil Sie ihn im Vordergrund ausgeführt haben. Um dieses Verhalten zu vermeiden, führen Sie den Server in background aus, indem Sie & an Ihren Befehl anhängen: 

node /srv/www/MyUserAccount/server/server.js &

Das Problem hier ist ein Mangel an Linux-Wissen und keine Frage nach Knoten. Weitere Informationen finden Sie unter: http://linuxconfig.org/understanding-foreground-and-background-linux-processes

AKTUALISIEREN:

Wie bereits erwähnt, kann der Knotenserver beim Verlassen des Terminals noch sterben. Ein häufiges Problem, dem ich begegnet bin, ist, dass der Knotenprozess zwar in bg ausgeführt wird, aber stdout ist und stderr immer noch auf das Terminal gerichtet ist. Das bedeutet, wenn der Knotenserver in console.log oder console.error schreibt, wird er einen Pipe-Fehler erhalten und abstürzen. Dies kann vermieden werden, indem Sie die Ausgabe Ihres Prozesses übermitteln:

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

Wenn das Problem weiterhin besteht, sollten Sie nach Dingen wie tmux oder Nohup suchen, die noch robuster als knotenspezifische Lösungen sind, da mit ihnen alle Arten von Prozessen (Datenbanken, Protokollierungsdienste, andere Sprachen).

Ein häufiger Fehler, der dazu führen könnte, dass der Server beendet wird, besteht darin, dass Sie nach dem Ausführen von Nohup node your_path/server.js & einfach das PuTTY-Terminal mit einem einfachen Klick schließen. Sie sollten stattdessen den Befehl exit verwenden, dann ist Ihr Knotenserver betriebsbereit.

176
DogNibbler

Sie könnten forever mit npm folgendermaßen installieren:

Sudo npm install -g forever

Und dann starten Sie Ihre Bewerbung mit:

forever server.js

Oder als Dienstleistung:

forever start server.js

Forever startet Ihre App neu, wenn sie aus irgendeinem Grund abstürzt oder stoppt. Um den Neustart auf 5 zu beschränken, können Sie Folgendes verwenden:

forever -m5 server.js

Um alle laufenden Prozesse aufzulisten:

forever list

Beachten Sie die Ganzzahl in den Klammern und verwenden Sie sie wie folgt, um einen Prozess zu stoppen:

forever stop 0

Der Neustart eines laufenden Prozesses lautet:

forever restart 0

Wenn Sie an Ihrer Anwendungsdatei arbeiten, können Sie den Parameter -w zum automatischen Neustart verwenden, wenn sich Ihre server.js-Datei ändert:

forever -w server.js
293
N20

Sie können PM2 verwenden. Hierbei handelt es sich um einen Produktionsprozessmanager für Node.js-Anwendungen mit integriertem Load Balancer. 

PM2 installieren

$ npm install pm2 -g

Anwendung starten

$ pm2 start app.js

Wenn Sie Express verwenden, können Sie Ihre App gerne starten

pm2 start ./bin/www --name="app"

Auflistung aller laufenden Prozesse:

$ pm2 list

Es werden alle Prozesse aufgelistet. Sie können Ihren Dienst dann stoppen/neu starten, indem Sie die ID oder den Namen der App mit folgendem Befehl verwenden.

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               

Um Protokolle anzuzeigen 

$ pm2 logs ['all'|app_name|app_id]
64

Ich würde empfehlen, nach etwas wie Forever zu suchen, um Node im Falle eines Absturzes neu zu starten und die Daemonisierung für Sie zu erledigen.

40
Brad

Wenn Sie Ihre Knoten-App immer nur im Terminal ausführen möchten, verwenden Sie einfach screen.

Installation auf Ubuntu/Debian:

Sudo apt-get install screen

Verwendungszweck:

$ screen
$ node /path/to/app.js

ctrl + a und dann ctrl + d zu verwerfen

Zu bekommen ist zurück:

Ein Bildschirm: screen -r

Wenn es mehr als eine gibt, können Sie alle Bildschirme mit folgendem auflisten: screen -ls

Und dann: screen -r pid_number

31
film42

Sie könnten dies einfach verwenden 

Nohup node /srv/www/MyUserAccount/server/server.js &

Dadurch wird die Anwendung weiter ausgeführt, und um sie herunterzufahren, müssen Sie sie beenden.

Dazu könnten Sie htop installieren und dann nach Knoten suchen und ihn dann abbrechen

21
Rick Roy

Forever ist ein sehr gutes NodeJs-Modul, um genau das zu tun.

Installieren Sie forever, indem Sie die Befehlszeile eingeben

$ npm install forever -g

Führen Sie dann den folgenden Befehl aus, um ein node.js-Skript auszuführen

$ forever start /path/to/script.js

Du bist startklar. Zusätzlich kannst du laufen

$ forever list

um alle laufenden Skripte zu sehen. Sie können jedes bestimmte Skript durch Eingabe abbrechen

$ forever stop [pid]

dabei ist [pid] die Prozess-ID des Skripts, das Sie mit dem Befehl list erhalten. Um alle Skripts zu stoppen, können Sie Folgendes eingeben

$ forever stopall
9
user4846835

Nohup funktioniert Ich habe AWS Ubunto vm eingecheckt. Folgen Sie der korrekten syntax-Anweisung. 

[email protected]:~/ms$ Nohup node server.js &

drücken Sie dann die Eingabetaste, um diese Zeile anzuzeigen

[email protected]:~/ms$ Nohup: ignoring input and appending output to ‘Nohup.out’

geben Sie dann dieses ein

rm Nohup.out

 enter image description here

8
Adiii

Hier ist eine upstart -Lösung, die ich für meine persönlichen Projekte verwendet habe:

Platziere es in /etc/init/node_app_daemon.conf:

description "Node.js Daemon"
author      "Adam Eberlin"

stop on shutdown

respawn
respawn limit 3 15

script
  export APP_HOME="/srv/www/MyUserAccount/server"
  cd $APP_HOME
  exec Sudo -u user /usr/bin/node server.js
end script

Dies dient auch zum erneuten Erkennen Ihrer Anwendung im Falle eines Absturzes. Versuche, die Anwendung erneut zu erstellen, werden aufgegeben, wenn sie in weniger als 15 Sekunden 3 oder mehr Male abstürzt.

8
Adam Eberlin

Während der Entwicklung empfehle ich die Verwendung von nodemon . Der Server wird neu gestartet, wenn sich eine Datei ändert. Wie andere darauf hingewiesen haben, ist Forever eine Option, aber in der Produktion hängt alles von der Plattform ab, die Sie verwenden .. Sie werden in der Regel die vom Betriebssystem empfohlene Methode zur Aufrechterhaltung der Dienste verwenden wollen (z. B. http://www.freedesktop.org/wiki/Software/systemd/ ).

7
Olivier Lalonde

Ich habe immer gefunden, die Arbeit perfekt zu machen.

Vorausgesetzt, Sie haben npm bereits installiert, wenn nicht, tun Sie es einfach

Sudo apt-get install npm

Dann für immer installieren

npm install forever --global

Jetzt können Sie es so ausführen

forever start app.js

https://codingweb.io/run-nodejs-application-background/

6
erax

Installation 

$ [Sudo] npm install forever -g

Sie können immer verwenden, um Skripts kontinuierlich auszuführen

forever start server.js

forever list

für Stop-Service 

forever stop server.js
6
Sudhir singh

Eine andere Möglichkeit ist das Erstellen einer Systemeinheit für Ihre App. Erstellen Sie eine "XXX.service" -Datei im Ordner "/ etc/systemd/system", ähnlich der folgenden:

[Unit]
Description=swagger
After=network.target

[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

Ein Vorteil ist, dass die App als Dienst ausgeführt wird und bei einem Absturz automatisch neu gestartet wird. 

Sie können auch sytemctl verwenden, um es zu verwalten:

systemctl start XXX zum Starten des Dienstes, systemctl stop XXX zum Stoppen und systemctl enable XXX zum automatischen Starten der App beim Systemstart.

3
Alex

Installieren Sie zuerst pm2 global

npm install -g pm2

dann fang an

pm2 start bin/www 
2

Ich hoffe, dies wird dir helfen.

Installieren Sie in der Befehlszeile für immer: 

npm install forever -g

Erstellen Sie eine Beispieldatei:

Sudo nano server.js 

Sie können die Datei bearbeiten und Ergebnisse direkt in Ihrem Browser abrufen.
Sie können filezilla oder einen beliebigen Editor zum Bearbeiten der Datei verwenden. Führen Sie diesen Befehl aus, um die Datei auszuführen: 

forever start --minUptime 1 --spinSleepTime 1000 -w server.js

 enter image description here

1

Ich empfehle die Verwendung von PM2, einem Prozessmanager für Node.js-Anwendungen. PM2 bietet eine einfache Möglichkeit, Anwendungen zu verwalten und zu dämonen (als Dienst auszuführen).

siehe diesen Link - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

1
vishwa

Sie müssen kein anderes Paket installieren.

Führen Sie diesen Befehl aus 

node server.js > stdout.txt 2> stderr.txt &

server.js ist Ihre Serverdatei oder kann api.js sein.

Danach drücken Sie "exit", um das Terminal zu schließen

exit
0
Gajender Singh