Wie führe ich ein node.js app als Hintergrunddienst?
Da dieser post hat viel Aufmerksamkeit bekommen im Laufe der Jahre, die ich aufgeführt habe, die top-Lösungen pro Plattform an der Unterseite von diesem post.
Original-Beitrag:
Möchte ich meine node.js server im hintergrund ausgeführt, d.h.: wenn ich in der Nähe mein terminal, ich will meinen server am laufen zu halten. Ich habe gegoogelt dies und kam mit dieser tutorial, aber es funktioniert nicht wie beabsichtigt. Anstatt also mit, dass daemon-Skript, ich dachte, ich habe gerade verwendet die Ausgabe-Umleitung (die 2>&1 >> file
Teil), aber das ist auch nicht verlassen - ich bekomme eine leere Zeile in meinem terminal, wie es ist zu warten, für Ausgangs - /Fehler.
Ich habe auch versucht den Prozess im hintergrund, aber sobald ich in der Nähe mein terminal der Prozess wird auch getötet.
Also, wie kann ich laufen lassen, wenn ich heruntergefahren meinem lokalen Rechner?
Top-Lösungen:
- Systemd (Linux)
- Launchd (Mac)
- Knoten-windows (Windows)
- PM2 (Node.js)
er meinte damit das schließen einer ssh-Sitzung beendet die Aufgabe
genau
github.com/Unitech/pm2 ist eine sehr gepflegt und sehr stabil, Prozess-manager, probieren Sie es aus !
Sie können Bildschirm (aperiodic.net/screen/quick_reference)
InformationsquelleAutor Peter Kruithof | 2010-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kopieren meiner eigenen Antwort von Wie führe ich ein Node.js Anwendung als eigener Prozess?
2015 Antwort: fast jede Linux-Distribution kommt mit systemd, was bedeutet, dass für immer, monit, PM2, etc sind nicht mehr notwendig - Ihre OS bereits behandelt diese Aufgaben.
Machen
myapp.service
Datei (ersetzen Sie 'myapp', die mit Ihrem app-Namen, natürlich):Hinweis: wenn Sie neu sind bei Unix:
/var/www/myapp/app.js
sollte#!/usr/bin/env node
auf die erste Zeile.Kopieren Sie Ihre service-Datei in das
/etc/systemd/system
.Starten Sie es mit
systemctl start myapp
.Damit Sie ausgeführt beim Booten mit
systemctl enable myapp
.Siehe Protokolle mit
journalctl -u myapp
Aus Wie wir bereitstellen Knoten-Anwendungen auf Linux, 2018 edition, zu denen auch Befehle zur Generierung einer AWS/DigitalOcean/Azure CloudConfig zu bauen Linux/node Server (einschließlich der
.service
- Datei).Beachten Sie, dass es auch systemd-services als Benutzer. Siehe zum Beispiel dieses tutorial. Sie können Ihre service-Datei im
~/.config/systemd/user
starten Sie es mitsystemctl --user start myapp
ist, aktivieren Sie es mitsystemctl --user enable myapp
.Vielen Dank für diese Antwort. Dies ist, was ich will, rein und klar
Ich habe akzeptiert diese Antwort anstelle von "für immer" beantworten, da ich auch denke, dies ist der beste Weg, es zu tun. Es werden ähnliche Antworten für Mac & Windows, aber ich vermute, die Mehrheit ist auf der Suche nach einer Linux-Lösung.
in EC2-AMI-Pfad /etc/systemd/system nicht vorhanden ist. Können Sie zeigen, was ist der richtige Pfad in der AWS EC2 Linux AMI?
InformationsquelleAutor mikemaccana
Sie für Immer verwenden können, ist Eine einfache CLI-tool, das gewährleistet, dass ein node-script wird ständig ausgeführt (d.h. für immer):
https://www.npmjs.org/package/forever
Während nohup funktioniert der trick, immer eine bessere Lösung als es daemonizes den Prozess. Tolle tool!
Nur durch die Art und Weise, ein einfacheres tutorial ist hier verfügbar: Halten Sie ein node.js server mit Forever
Ich habe Immer für eine Weile, am Anfang scheint alles ok, aber dann die Katastrophe passiert ist. Forever konnte nicht verwalten die Prozesse mehr laufen lassen und wild. Immer noch kämpfen, um eine Lösung zu finden. Ich werde versuchen, nohup
Geoffrey - Nein, Sie tun müssen
forever start /path/to/yourApp.js
in Ihr server-Startskript.InformationsquelleAutor muzz
UPDATE - Wie bereits in einer der Antworten, PM2 hat einige wirklich nette Funktionen fehlen, für immer. Überlegen Sie es.
Ursprüngliche Antwort
Verwenden nohup:
BEARBEITEN ich wollte noch hinzufügen, dass die akzeptierte Antwort ist wirklich der Weg zu gehen. Ich bin immer auf Instanzen, die müssen bleiben. Ich mag zu tun
npm install -g forever
so ist es in der node-path und dann ebenforever start server.js
nohup
steht fürno hangup
stammt aus den alten Tagen, wo man wollte Sie halten, ein Prozess lebendig, wenn Sie "auflegen" Ihr modem.heutzutage ist es eher die Namen von signal 1, die Prozesse zu erhalten, um zu warnen, dass der Benutzer schließt die shell (oder verloren, modem-Verbindung, natürlich :P)
Es ist nicht die beste Lösung, da, wenn die app auf ein nicht abgefangener Fehler der node-Prozess wird beendet und nicht neu gestartet. Dennoch ist es eine sinnvolle option für die Entwicklung.
Wie sollte ich hinzufügen, Umwelt-Variablen, die? zB: PORT=80 Knoten server.js
Schauen Sie sich diese Antwort aus, SO stackoverflow.com/questions/8825460/...
InformationsquelleAutor NG.
Könnte dies der akzeptierte Weg, aber ich mache es mit dem Bildschirm, vor allem, während in der Entwicklung, da bring ich ihn zurück und macht mit, wenn nötig.
Den Bildschirm, löst Sie sich und überleben Sie die Protokollierung deaktivieren. Dann kannst du es wieder machst screen -r ein. Schlagen bis der Bildschirm-Handbuch für weitere details. Sie können die Namen der Bildschirme und so weiter, wenn Sie mögen.
Auch tmux ist schön. Funktioniert wie Bildschirm (STRG-B ist standardmäßig anstelle von STRG-A, aber ist konfigurierbar). Tmux besitzt panels (split-screens).
Bildschirm-panels zu
Sehr nützlich, wenn Sie Ihre arbeiten mit NodeJs auf dem RaspberryPi..
ich bin mit diesem seit ein paar Wochen für eine meteor-app. `$screen -dr " für trennen und erneutes anfügen könnte gelegentlich erforderlich sein.
InformationsquelleAutor Brent
2016 Update:
Die Knoten-windows/mac/linux-Serie nutzt eine gemeinsame API für alle Betriebssysteme, so ist es durchaus eine relevante Lösung. Jedoch; Knoten-linux erzeugt systemv init-Dateien. Als systemd weiterhin wachsen in der Popularität, ist es realistisch eine bessere option auf Linux. PR ist zu begrüßen, wenn jemand hinzufügen will systemd-support-zu-Knoten-linux 🙂
Original-Thread:
Dies ist ein ziemlich Alter thread jetzt, aber Knoten-windows bietet eine weitere Möglichkeit zum erstellen von hintergrund-Dienste auf Windows. Es basiert lose auf der
nssm
Konzept der Verwendung einesexe
wrapper um Ihren Knoten script. Aber, es nutztwinsw.exe
statt und bietet eine konfigurierbare node-wrapper für mehr granulare Kontrolle über, wie der Prozess startet/Stoppt auf Fehler. Diese Prozesse sind verfügbar, wie jede andere Dienstleistung:Das Modul auch backt in einem Ereignis-Protokollierung:
Daemonizing Ihr Skript erfolgt über code. Zum Beispiel:
Das Modul unterstützt Dinge wie capping neu gestartet (so schlecht Skripte nicht den Schlauch Ihres Servers) und wachsenden Abständen zwischen Neustarts.
Seit dem node-windows-Dienste laufen, wie jeder andere, es ist möglich, verwalten/überwachen die service, mit was auch immer software, die Sie bereits verwenden.
Schließlich gibt es keine
make
Abhängigkeiten. In anderen Worten, eine einfachenpm install -g node-windows
arbeiten. Sie brauchen nicht Visual Studio .NET, node-gyp Magie, diese zu installieren. Auch es ist MIT und der BSD Lizenz.In die vollständige Offenlegung, ich bin der Autor dieses Moduls. Es wurde entwickelt, um zu lindern die genaue Schmerzen der OP erlebt, aber mit enger integration in die Funktionalität des Betriebssystems bereits bietet. Ich hoffe, dass zukünftige Zuschauer mit dieser gleichen Frage, die es nützlich finden.
Ich habe auch portiert, dies zu Knoten-linux
Ich komme bis zu dem Punkt, planen Sie ein paar Knoten, Programme und stand vor einer Entscheidung, wählen Sie den Knoten windows, für immer und Ewig oder Kue. Ich lehne mich in Richtung Knoten-windows, würde aber gerne verstehen warum nicht, nicht um für Immer zu verwenden oder Kue, wenn ich will, zu planen und zu überwachen, ein Dutzend Knoten-Programme. Manche laufen ewig. Monitoring zu.
Knoten-windows verwendet das native Betriebssystem für die Verwaltung von hintergrund-Diensten, und die native Ereignisprotokoll für die Protokollierung. Forever hat seine eigene, benutzerdefinierte monitoring & Protokollierung. Ich schrieb einen Artikel zu diesem in medium.com/p/2a602ea657a2 Es klingt wie Sie benötigen, planen Sie Ihre Skripte nicht laufen Sie die ganze Zeit als hintergrund-Dienste. Projekte wie die Kue und die Tagesordnung für diese entwickelt. Knoten-windows & für Immer dienen einem anderen Zweck.
wie führe ich das Beispiel in der node-mac ?, im terminal habe ich versucht den Knoten install.js aber es scheint nicht zu pickup helloworld.js
InformationsquelleAutor Corey
UPDATE: ich aktualisiert, um die neueste Version von pm2:
für viele Anwendungsfälle über ein systemd-service ist die einfachste und am besten geeignete Weg, um die Verwaltung eines Knoten-Prozess. für diejenigen, auf denen zahlreiche Knoten Prozesse oder voneinander unabhängig ausgeführt Knoten microservices in einer einzigen Umgebung, pm2 ist ein mehr full-featured-tool.
https://github.com/unitech/pm2
http://pm2.io
pm2 monit
oder Prozess-Liste mitpm2 list
pm2 logs
InformationsquelleAutor Hutch
Wenn Sie mit OSX, dann ist der einfachste Weg, um die Herstellung eines echten system-Prozess, ist die Verwendung
launchd
um es zu starten.Bauen eine plist wie diese, und setzen Sie ihn in das /Library/LaunchDaemons mit dem Namen
top-level-domain.your-domain.application.plist
(Sie müssen root sein, wenn Sie es platzieren):Wenn Sie fertig sind, die Ausgabe (als root):
haben, und Sie.
Und Sie werden immer noch ausgeführt werden, nachdem ein Neustart.
Für andere Optionen in der plist Blick auf die man-Seite hier: https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html
InformationsquelleAutor Lars Christensen
Ich bin einfach mit der daemon npm-Modul:
In letzter Zeit bin ich auch mit Mo(1) von TJ Holowaychuk zu starten und zu verwalten, einfache Knoten-apps.
InformationsquelleAutor LoG
Wenn Sie wollen einfach nur, um das Skript auszuführen ohne Unterbrechung bis es abgeschlossen ist können Sie
nohop
wie schon erwähnt in den Antworten hier. Jedoch keine Antworten bieten einen vollständigen Befehl, der meldet sich auchstdin
undstdout
.>>
bedeutet anfügenapp.log
.2>&1
stellt sicher, dass die Fehler auch senden zustdout
und Hinzugefügt, um dieapp.log
.&
macht Sie sicher, Ihre aktuelle terminal wird getrennt vom Befehl, so dass Sie weiter arbeiten können.Wenn Sie möchten, führen Sie einen node-server (oder etwas, das sollte wieder anfangen, wenn der server neu gestartet wird), die Sie verwenden sollten systemd /systemctl.
InformationsquelleAutor Xeoncross
Ich benutze Supervisor für die Entwicklung. Es funktioniert einfach. Wann immer Sie änderungen an einer .js-Datei Supervisor automatisch neu startet Ihre app mit diesen änderungen geladen.
Hier ist ein link zu Ihrer Github-Seite
Installieren :
Können Sie leicht beobachten wie andere Erweiterungen mit-e -. Ein weiterer Befehl, den ich verwenden Sie oft ist-ich, Sie zu ignorieren bestimmte Ordner.
Können Sie nohup und supervisor, um Ihren Knoten app im hintergrund ausgeführt, auch nachdem Sie sich aus.
Ich zweite dieser. Wenn Sie änderungen an PHP-Dateien, würden Sie starten Sie den Apache-oder Nginx-server? Definitiv nicht. Warum dann die Mühe zu machen das ganze neu starten Node.js server auch nur eine Zeile code ändern? Obwohl dies vielleicht nicht die beste Lösung, zumindest mit Vorgesetzten, die Sie nicht brauchen, um über den Neustart-Prozess (eigentlich dem Neustart immer noch passieren).
InformationsquelleAutor Donald Gary
Versuchen, führen Sie diesen Befehl, wenn Sie mit nohup -
Können Sie auch immer starten-server
PM2 unterstützt auch
npm start
pm2 start npm -- start
InformationsquelleAutor Himanshu Teotia
Node.js als hintergrund-service in WINDOWS XP
Installation:
Erstellen c:\node\helloworld.js
Befehl öffnen die Konsole und geben Sie Folgendes ein (setx nur wenn Resource Kit installiert ist)
Eine nette batch-goodie zu erstellen c:\node\ServiceMe.cmd
Service Management:
services.msc oder über Start->Ausführen-> MSCONFIG-> Dienste (und Häkchen bei " Ausblenden
Alle Microsoft-Dienste').
'node-'.
InformationsquelleAutor Page2PagePro
Die akzeptierte Antwort ist wohl die beste Produktion beantworten, aber für einen schnellen hack zu tun dev Arbeit, fand ich dies:
nodejs scriptname.js &
hat nicht funktioniert, weil nodejs schien zu verschlingen, die &, und so ist die Sache nicht lassen Sie mich mit dem terminal ohne scriptname.js sterben.Aber ich habe
nodejs scriptname.js
in einem .sh-Datei, undnohup sh startscriptname.sh &
gearbeitet.Definitiv keine Produktion Ding, aber es löst das "ich brauche, um mit meinem terminal und will nicht starten 5 verschiedene terminals" problem.
InformationsquelleAutor ArtHare
Wenn Sie mit nodejs in linux server, ich denke dies ist der beste Weg.
Erstellen Sie ein service-Skript und kopieren Sie nach /etc/init/nodejs.conf
Dienst starten: sudo service nodejs starten
Dienst stoppen: sudo service nodejs-stop
Sevice Skript
InformationsquelleAutor Pedro Muniz
Juni 2017 Update:
Lösung für Linux: Linux (Red hat). Die vorherigen Kommentare nicht für mich arbeiten.
Dies funktioniert für mich auf der Amazon-Web-Service - Red Hat 7. Hoffe, das funktioniert für jemanden da draußen.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
was es tut. Können Sie mir mehr details, bitte. Ich bin nicht sicher, aber ich denke, es leitet Datenverkehr von80
zu8080
die node-server lauscht, richtig?InformationsquelleAutor Eman Jayme
verwenden nssm die beste Lösung für windows, nur download nssm, öffnen cmd ein, um nssm-Verzeichnis und geben Sie
wird diese installieren einen neuen windows-Dienst aufgelistet werden Dienstleistungen.msc von dort aus können Sie starten oder stoppen den service dieser Dienst wird automatisch gestartet, und Sie können konfigurieren, neu zu starten, wenn es fehlschlägt.
InformationsquelleAutor Aun Rizvi
Zur Abrundung der verschiedenen Optionen vorgeschlagen, hier ist noch eine: die
daemon
Befehl in GNU/Linux, die Sie hier nachlesen können: http://libslack.org/daemon/manpages/daemon.1.html. (entschuldigt, wenn dieser bereits in einem der Kommentare oben).InformationsquelleAutor ravi
Check-out Fuge! Abgesehen von der Einführung für viele Arbeitnehmer, können Sie verteufeln Ihren Knoten Prozess auch!
http://github.com/pgte/fugue
InformationsquelleAutor Shripad Krishna
hat jemand bemerkt, eine triviale verwechselt die position "2" >&1" ?
sollte
InformationsquelleAutor osexp2003
Benutze ich tmux für mehrere Fenster/Fenster-Entwicklungsumgebung, die auf remote-hosts. Es ist wirklich einfach zu trennen und halten den Prozess im hintergrund laufen. Haben Sie einen Blick auf tmux
InformationsquelleAutor Karl Pokus
Für Menschen, die mit neueren Versionen des daemon npm-Modul - du musst Datei-Deskriptoren, statt des strings:
InformationsquelleAutor Viktor Nonov
PM2 ist ein Produktions-Prozess-manager für Node.js Anwendungen mit einer integrierten load-balancer. Es ermöglicht Ihnen, Anwendungen bleiben ewig lebendig, neu laden, ohne Ausfallzeiten und erleichtern die gemeinsame system-admin-Aufgaben.
https://github.com/Unitech/pm2
InformationsquelleAutor Arezki Lebdiri
Ich bin überrascht, dass niemand erwähnt hat Guvnor
Ich habe versucht, für immer, pm2, etc. Aber, wenn es darum geht, Feste control-und web-basierte performance-Metriken, die ich gefunden habe, Guvnor bei weitem die beste. Plus, es ist auch vollständig opensource.
Edit : Allerdings bin ich mir nicht sicher, ob es funktioniert auf windows. Ich habe es nur verwendet auf linux.
Scheint abgestanden ab 2017. Bauen scheitern. Kein code schiebt im letzten Jahr. Fraglich.
InformationsquelleAutor Josh
Ist diese Antwort Recht spät zur party, aber ich fand, dass die beste Lösung war, schreiben Sie ein shell-Skript, dass verwendet, die sowohl die
screen -dmS
undnohup
Befehle.Stell ich auch
>> logfile
bisschen auf das Ende, so kann ich problemlos speichern der Knotenconsole.log()
Aussagen.Warum, habe ich ein shell-Skript aus? Gut ich habe auch in einer if-Anweisung, die überprüft, um zu sehen, ob die
node myserver.js
Prozess bereits ausgeführt wurde.So, ich war in der Lage, erstellen Sie eine einzelne Befehlszeile-option, die beiden können mir halten die server gehen, und auch wieder starten, wenn ich änderungen gemacht haben, das ist sehr hilfreich für die Entwicklung.
Ich habe dieses problem und bin ziemlich neu bei Linux. Wie würden Sie es anstellen, ohne screen oder nohup?
InformationsquelleAutor Anwar Hahj Jefferson-George