Ich verbinde mich über Putty SSH mit dem Linux-Server. Ich habe versucht, es als Hintergrundprozess wie folgt auszuführen:
$ node server.js &
Nach 2,5 Stunden wird das Terminal jedoch inaktiv und der Prozess stirbt ab. Kann ich den Prozess trotzdem am Leben erhalten, auch wenn das Terminal nicht angeschlossen ist?
Bearbeiten 1
Eigentlich habe ich es versucht nohup
, aber sobald ich das Putty SSH-Terminal schließe oder mein Internet ausstecke, stoppt der Serverprozess sofort.
Muss ich in Putty etwas tun?
Bearbeiten 2 (am Februar 2012)
Es gibt ein node.js
Modul für immer . Der Server node.js wird als Daemon-Dienst ausgeführt.
node.js
linux
background-process
Murvinlai
quelle
quelle
exit
. Wenn ich gerade das Putty-Fenster schließe, schlägt es fehl.Antworten:
Einfache Lösung (wenn Sie nicht daran interessiert sind, zum Prozess zurückzukehren, möchten Sie nur, dass er weiter ausgeführt wird):
Es gibt auch den
jobs
Befehl, eine indizierte Liste dieser Hintergrundprozesse anzuzeigen. Und Sie können einen Hintergrundprozess beenden, indem Sie ihn ausführenkill %1
oderkill %2
wobei die Nummer der Index des Prozesses ist.Leistungsstarke Lösung (ermöglicht es Ihnen, die Verbindung zum Prozess wiederherzustellen, wenn dieser interaktiv ist):
Sie können dann durch Drücken von Strg + a + d die Verbindung trennen und durch Ausführen wieder anhängen
screen -r
Betrachten Sie auch die neuere Alternative zum Bildschirm, tmux.
quelle
sudo bash
.nohup node server.js > /dev/null 2>&1 &
nohup
bedeutet: Beenden Sie diesen Vorgang nicht, auch wenn die Stty abgeschnitten ist.> /dev/null
bedeutet: stdout geht nach / dev / null (ein Dummy-Gerät, das keine Ausgabe aufzeichnet).2>&1
bedeutet: stderr geht auch zum stdout (der bereits umgeleitet wird/dev/null
). Sie können & 1 durch einen Dateipfad ersetzen, um ein Fehlerprotokoll zu führen, z.2>/tmp/myLog
&
am Ende bedeutet: Führen Sie diesen Befehl als Hintergrundaufgabe aus.quelle
/dev/null
? Nizza Protokollierung ... Viel Glück beim Versuch, dies zu debuggen ...Sie sollten wirklich versuchen, zu verwenden
screen
. Es ist ein bisschen komplizierter als nur zu tunnohup long_running &
, aber den Bildschirm zu verstehen, wenn Sie nie wieder zurückkommen.Starten Sie zuerst Ihre Bildschirmsitzung:
Führen Sie alles aus, was Sie wollen:
Drücken Sie Strg + A und dann d. Erledigt. Ihre Sitzung wird im Hintergrund fortgesetzt.
Sie können alle Sitzungen nach auflisten
screen -ls
und einige nachscreen -r 20673.pts-0.srv
Befehl anhängen , wobei 0673.pts-0.srv eine Eintragsliste ist.quelle
Dies ist eine alte Frage, hat aber bei Google einen hohen Stellenwert. Ich kann fast nicht an die Antworten mit den höchsten Stimmen glauben, weil das Ausführen eines node.js-Prozesses innerhalb einer Bildschirmsitzung mit dem
&
oder sogar mit demnohup
Flag - allesamt - nur Problemumgehungen sind.Speziell die Screen / TMux-Lösung, die eigentlich als Amateur- Lösung gelten sollte. Screen und Tmux sind nicht dazu gedacht, Prozesse am Laufen zu halten, sondern zum Terminalen von Terminalsitzungen. Es ist in Ordnung, wenn Sie ein Skript auf Ihrem Server ausführen und die Verbindung trennen möchten. Bei einem node.js-Server möchten Sie jedoch nicht, dass Ihr Prozess an eine Terminalsitzung angehängt wird. Das ist zu zerbrechlich. Um die Dinge am Laufen zu halten, müssen Sie den Prozess dämonisieren!
Dafür gibt es viele gute Werkzeuge.
PM2 : http://pm2.keymetrics.io/
Ein großer Vorteil, den ich für PM2 sehe, ist, dass es das Systemstart-Skript generieren kann, damit der Prozess zwischen Neustarts bestehen bleibt:
Wo
platform
kann seinubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.forever.js : https://github.com/foreverjs/forever
Init-Skripte :
Ich gehe nicht ins Detail, wie man ein Init-Skript schreibt, da ich kein Experte in diesem Thema bin und es für diese Antwort zu lang wäre, aber im Grunde handelt es sich um einfache Shell-Skripte, die durch Betriebssystemereignisse ausgelöst werden. Mehr dazu lesen Sie hier
Docker :
Führen Sie Ihren Server einfach in einem Docker-Container mit der
-d
Option und voilá aus , Sie haben einen daemonisierten node.js-Server!Hier ist ein Beispiel für eine Docker-Datei (aus dem offiziellen Handbuch von node.j ):
Erstellen Sie dann Ihr Image und führen Sie Ihren Container aus:
Hoffe, das hilft jemandem, auf dieser Seite zu landen. Verwenden Sie immer das richtige Werkzeug für den Job. Es erspart Ihnen viele Kopfschmerzen und über Stunden!
quelle
tail -f
Sie die Protokolldatei verwenden, die pm2 generiert.screen
Lösung, die viele Leute finden, eine Problemumgehung ist. Es gibt viele Möglichkeiten, eine bestimmte Aufgabe zu erfüllen. Ich glaube, es kommt vor, dass (unter Berücksichtigung der spezifischen Frage) die spezifische Aufgabe derrun as background and never die
Hervorragenden für viele erfüllt wird. Es hat auch den zusätzlichen Vorteil, dass der Benutzer wieder darauf zugreifen kann, um erneut zu interagieren und Änderungen vorzunehmen, wenn er dies wünscht. Der Schlüssel ist Komponenten istbackground
undnever die
. Alle Lösungen haben bestimmte Boni.nohup
ist die Lösung. Es ist in Linux integriert und dafür da. Es ist eine Zeile, es ist sauber und es funktioniert jedes Mal wie beabsichtigt, unabhängig von Updates. Menschen sollten wirklich versuchen, die Verwendung von Tools von Drittanbietern für grundlegende Anwendungsfälle wie diesen zu vermeiden. Das Docker-Beispiel (zum Beispiel) ist viel ausführlicher und ressourcenintensiver als der eine einfache Befehl in der Antwort mit der höchsten Bewertung. Liebe Docker, aber nicht dafür.nohup
Lösung erfüllt nicht die Anforderung "Niemals sterben". Wenn Sie keine sehr kniffligetrap
oder hackige Endlosschleife schreiben , kann ich den Prozess nicht ohne die Verwendung von speziell für diesen Zweck geschriebenen Tools (oder natürlich eines von Ihnen selbst geschriebenen Init-Skripts) dämonisieren.Eine andere Lösung lehnt den Job ab
quelle
nohup
Damit kann das Programm auch nach dem Absterben des Terminals fortgesetzt werden. Ich hatte tatsächlich Situationen, in denennohup
verhindert wurde, dass die SSH-Sitzung korrekt beendet wurde. Daher sollten Sie auch Eingaben umleiten:Abhängig von der
nohup
Konfiguration müssen Sie möglicherweise auch die Standardausgabe und den Standardfehler in Dateien umleiten.quelle
Ich habe diese Funktion in meiner Shell-RC-Datei, basierend auf der Antwort von @ Yoichi:
Sie können es folgendermaßen verwenden:
quelle
Nohup und Bildschirm bieten großartige Lichtlösungen, um Node.js im Hintergrund auszuführen. Der Node.js-Prozessmanager ( PM2 ) ist ein praktisches Tool für die Bereitstellung. Installieren Sie es mit npm global auf Ihrem System:
npm install pm2 -g
So führen Sie eine Node.js-App als Daemon aus:
pm2 start app.js
Sie können es optional mit Keymetrics.io verknüpfen, einem Überwachungs-SAAS von Unitech.
quelle
Der Befehl wird aus der Liste der aktiven Aufgaben entfernt und der Befehl an den Hintergrund gesendet
quelle
Haben Sie über den Befehl nohup gelesen ?
quelle
So führen Sie den Befehl als Systemdienst auf Debian mit sysv init aus:
Kopieren Sie das Skelett-Skript und passen Sie es an Ihre Bedürfnisse an. Wahrscheinlich müssen Sie nur einige Variablen festlegen. Ihr Skript erbt feine Standardeinstellungen von
/lib/init/init-d-script
, wenn etwas nicht Ihren Anforderungen entspricht - überschreiben Sie es in Ihrem Skript. Wenn etwas schief geht, können Sie Details in der Quelle sehen/lib/init/init-d-script
. Obligatorische Vars sindDAEMON
undNAME
. Das Skript wird verwendetstart-stop-daemon
, um Ihren Befehl auszuführen. In könnenSTART_ARGS
Sie zusätzliche Parameter fürstart-stop-daemon
die Verwendung definieren.So starte ich einige Python-Sachen für mein Wikimedia-Wiki:
Neben dem Festlegen von vars musste ich überschreiben,
do_stop_cmd
da Python die ausführbare Datei ersetzt, sodass der Dienst nicht ordnungsgemäß beendet wurde.quelle
Abgesehen von den oben genannten coolen Lösungen möchte ich auch Supervisord- und Monit-Tools erwähnen, mit denen der Prozess gestartet, seine Anwesenheit überwacht und im Falle eines Todes gestartet werden kann. Mit 'monit' können Sie auch einige aktive Prüfungen durchführen, z. B. prüfen, ob der Prozess auf eine http-Anfrage reagiert
quelle
Für Ubuntu benutze ich Folgendes:
Grüße
quelle
Versuchen Sie dies für eine einfache Lösung
cmd & exit
quelle