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!

3voto

Verwenden Sie das Modul pm2. pm2 nodejs-Modul

3voto

Thomas Urban Punkte 4149

Da ich diese Option in der Liste der bereitgestellten Antworten vermisse, möchte ich eine förderfähige Option ab 2020 hinzufügen: Docker oder jede gleichwertig Container Plattform. Neben der Gewährleistung, dass Ihre Anwendung in einer stabilen Umgebung arbeitet, gibt es zusätzliche Sicherheitsvorteile sowie eine verbesserte Portabilität.

Es gibt Docker-Unterstützung für Windows, macOS und die meisten/größeren Linux-Distributionen. Installation von Docker auf einer unterstützten Plattform ist recht einfach und gut dokumentiert. Das Einrichten einer Node.js-Anwendung ist so einfach wie das Einsetzen in einen Container und das Ausführen dieses Containers, wobei sichergestellt wird, dass er nach dem Herunterfahren neu gestartet wird.

Container-Image erstellen

Angenommen, Ihre Anwendung ist verfügbar in /home/ich/meine-app auf diesem Server, erstellen Sie eine Textdatei Dockerdatei im Ordner /home/ich mit ähnlichem Inhalt wie diesem:

FROM node:lts-alpine
COPY /my-app/ /app/
RUN cd /app && npm ci
CMD ["/app/server.js"]

Es wird ein Image für die LTS-Version von Node.js unter Alpine Linux erstellt, die Dateien der Anwendung in das Image kopiert und ausgeführt npm ci um sicherzustellen, dass die Abhängigkeiten mit dem Laufzeitkontext übereinstimmen.

Eine weitere Datei erstellen .dockerignore im selben Ordner mit dem Inhalt

**/node_modules

Dadurch wird verhindert, dass bestehende Abhängigkeiten Ihres Hostsystems in den Container injiziert werden, da sie dort möglicherweise nicht funktionieren. Die vorgestellte RUN Befehl in Dockerdatei wird das in Ordnung bringen.

Erstellen Sie das Bild mit einem Befehl wie diesem:

docker build -t myapp-as-a-service /home/me

Le site -t Option ist die Auswahl des "Namens" des erstellten Container-Images. Dies wird bei den unten aufgeführten laufenden Containern verwendet.

Der letzte Parameter ist die Auswahl des Ordners, der die Dockerdatei enthält, und nicht die Dockerdatei selbst. Sie können einen anderen Ordner auswählen, indem Sie die Option -f .

Start Container

Verwenden Sie diesen Befehl zum Starten des Containers:

docker run -d --restart always -p 80:3000 myapp-as-a-service

Dieser Befehl geht davon aus, dass Ihre Anwendung auf Port 3000 lauscht und Sie möchten, dass sie auf Port 80 Ihres Hosts offengelegt wird.

Dies ist sicherlich ein sehr begrenztes Beispiel, aber ein guter Ausgangspunkt.

3voto

Aun Rizvi Punkte 309

Verwenden. nssm die beste Lösung für Windows, einfach herunterladen nssm öffnen Sie cmd im Verzeichnis nssm und geben Sie ein

nssm install <service name> <node path> <app.js path> 

eg: nssm install myservice "C:\Program Files\nodejs" "C:\myapp\app.js" 

wird ein neuer Windows-Dienst installiert, der unter services.msc Von dort aus können Sie den Dienst starten oder stoppen. Dieser Dienst wird automatisch gestartet und kann so konfiguriert werden, dass er bei einem Fehler neu gestartet wird.

2voto

ravi Punkte 3229

Um die verschiedenen vorgeschlagenen Optionen zu vervollständigen, sei hier noch eine weitere genannt: die daemon Befehl in GNU/Linux, über den Sie hier lesen können: http://libslack.org/daemon/manpages/daemon.1.html . (bitte entschuldigen Sie, wenn dies bereits in einem der obigen Kommentare erwähnt wurde).

1voto

osexp2003 Punkte 2564

Ist jemandem ein trivialer Fehler bei der Position von "2>&1" aufgefallen?

2>&1 >> file

sollte sein

>> file 2>&1

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