663 Stimmen

Wie kann ich eine node.js-Anwendung als Hintergrunddienst ausführen?

Da dieser Beitrag im Laufe der Jahre viel Aufmerksamkeit erregt hat, habe ich die besten Lösungen für jede Plattform am Ende dieses Beitrags aufgelistet.


Originalpfosten :

Ich möchte, dass mein Node.js-Server im Hintergrund läuft, d. h.: Wenn ich mein Terminal schließe, soll mein Server weiterlaufen. Ich habe dies gegoogelt und kam mit diesem Lehrgang Es funktioniert jedoch nicht wie vorgesehen. Statt dieses Daemon-Skript zu verwenden, dachte ich, ich benutze einfach die Ausgabeumleitung (die 2>&1 >> file Teil), aber auch dieser wird nicht beendet - ich erhalte eine leere Zeile in meinem Terminal, als ob es auf Ausgaben/Fehler wartet.

Ich habe auch versucht, den Prozess in den Hintergrund zu stellen, aber sobald ich mein Terminal schließe, wird der Prozess ebenfalls beendet.

Wie kann ich es also weiterlaufen lassen, wenn ich meinen lokalen Computer herunterfahre?


Top-Lösungen :

3 Stimmen

Ich glaube, er wollte sein lokales System abschalten.

67 Stimmen

Er meinte, dass das Beenden einer ssh-Sitzung die Aufgabe beendet

6 Stimmen

github.com/Unitech/pm2 ist ein sehr gepflegter und sehr stabiler Prozessmanager, probieren Sie ihn aus!

1voto

jason-warner Punkte 53

Ich erhielt den folgenden Fehler bei der Verwendung von @mikemaccana akzeptierte Antwort auf einer RHEL 8 AWS EC2-Instanz: (code=exited, status=216/GROUP)

Der Grund dafür war die Verwendung der Benutzer-/Gruppeneinstellung: 'nobody'.

Wenn man googelt, scheint es, dass die Verwendung von Benutzer/Gruppe als 'nobody'/'nogroup' für Daemons eine schlechte Praxis ist, wie beantwortet aquí auf dem Unix Stack Exchange.

Nachdem ich Benutzer/Gruppe auf meinen tatsächlichen Benutzer und meine Gruppe gesetzt hatte, funktionierte es hervorragend.

Sie können eingeben whomai y groups um die verfügbaren Optionen zur Behebung des Problems zu sehen.

Meine Servicedatei für eine Full-Stack-Node-App mit Mongodb:

[Unit]
Description=myapp
After=mongod.service

[Service]
ExecStart=/home/myusername/apps/myapp/root/build/server/index.js
Restart=always
RestartSec=30
User=myusername
Group=myusername
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/home/myusername/apps/myapp

[Install]
WantedBy=multi-user.target

2 Stimmen

Denken Sie nur daran, dass Sie niedrigere Ports wie 80 443 nicht binden können!

1voto

Shripad Krishna Punkte 10293

Schau dir Fugue an! Abgesehen davon, dass Sie viele Worker starten können, können Sie auch Ihren Node-Prozess verteufeln!

http://github.com/pgte/fugue

0voto

Diese Antwort kommt ziemlich spät, aber ich fand, dass die beste Lösung darin bestand, ein Shell-Skript zu schreiben, das sowohl die screen -dmS y nohup Befehle.

screen -dmS newScreenName nohup node myserver.js >> logfile.log

Ich füge auch die >> logfile Bit am Ende, damit ich den Knoten leicht speichern kann console.log() Erklärungen.

Warum habe ich ein Shell-Skript verwendet? Nun, ich habe auch eine if-Anweisung eingefügt, die prüft, ob die node myserver.js Prozess lief bereits.

Auf diese Weise konnte ich eine einzige Befehlszeilenoption erstellen, mit der ich den Server sowohl am Laufen halten als auch neu starten kann, wenn ich Änderungen vorgenommen habe, was für die Entwicklung sehr hilfreich ist.

2 Stimmen

Ich bin auf dieses Problem gestoßen und bin ziemlich neu in Linux. Wie würden Sie es ohne Bildschirm oder nohup tun?

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