Die beste Methode ist, den Prozess in einem Terminal-Multiplexer zu starten. Alternativ können Sie dafür sorgen, dass der Prozess das HUP-Signal nicht empfängt.
Ein Terminal-Multiplexer stellt "virtuelle" Terminals bereit, die unabhängig vom "realen" Terminal laufen (tatsächlich sind alle Terminals heutzutage "virtuell", aber das ist ein anderes Thema für einen anderen Tag). Das virtuelle Terminal läuft weiter, auch wenn Ihr reales Terminal mit Ihrer SSH-Sitzung geschlossen wird.
Alle vom virtuellen Terminal aus gestarteten Prozesse laufen mit diesem virtuellen Terminal weiter. Wenn Sie sich wieder mit dem Server verbinden, können Sie sich wieder mit dem virtuellen Terminal verbinden, und alles wird so, als wäre nichts passiert, außer der Zeit, die vergangen ist.
Zwei beliebte Terminal-Multiplexer sind screen und tmux .
Bildschirm hat eine steile Lernkurve. Hier ist ein gutes Tutorial mit Diagrammen, die das Konzept erläutern: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
Das HUP- Signal (oder SIGHUP) wird vom Terminal an alle untergeordneten Prozesse gesendet, wenn das Terminal geschlossen wird. Die übliche Aktion beim Empfang von SIGHUP ist das Beenden. Wenn Ihre SSH-Sitzung getrennt wird, werden alle Ihre Prozesse beendet. Um dies zu vermeiden, können Sie dafür sorgen, dass Ihre Prozesse kein SIGHUP erhalten.
Zwei einfache Methoden sind nohup
und disown
.
Weitere Informationen zu Funktionsweise nohup
und Funktionsweise finden disown
Sie in dieser Frage und Antwort: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Hinweis: Obwohl die Prozesse weiterhin ausgeführt werden, können Sie nicht mehr mit ihnen interagieren, da sie keinem Terminal mehr zugeordnet sind. Diese Methode eignet sich hauptsächlich für lange laufende Batch-Prozesse, bei denen nach dem Start keine Benutzereingaben mehr erforderlich sind.
screen
Ihnen viel mehr Optionen zur Verfügung. Wenn Sie jedoch dieauthorized_keys
Möglichkeit verwenden, ein Skript von einem Remotestandort aus auszuführenssh
, ist diesenohup
Option eine einfache Möglichkeit, mit dem Skript Prozesse zu starten, die länger dauern als diessh
Sitzung, in der sie gestartet wurden .Es gibt einige Möglichkeiten, dies zu tun, aber die nützlichste ist die Verwendung von GNU Screen .
Nachdem Sie sich angemeldet haben, laufen Sie
screen
. Dadurch wird eine andere Shell gestartet, die auf dem Bildschirm ausgeführt wird. Führen Sie Ihren Befehl aus und führen Sie dann ein Ctrl- aus a d.Dadurch werden Sie von der Bildschirmsitzung "getrennt". An diesem Punkt können Sie sich abmelden oder etwas anderes tun, was Sie möchten.
Wenn Sie erneut eine Verbindung zur Bildschirmsitzung herstellen möchten, führen Sie dies einfach
screen -RD
über die Shell-Eingabeaufforderung aus (als derselbe Benutzer, der die Sitzung erstellt hat).quelle
In
bash
ist dasdisown
Schlüsselwort perfekt dafür geeignet. Führen Sie Ihren Prozess zunächst im Hintergrund aus (verwenden Sie&
oder geben Sie^Z
dann Folgendes einbg
):Indem
jobs
Sie Folgendes eingeben , können Sie feststellen, dass der Prozess immer noch im Besitz der Shell ist:Wenn Sie sich zu diesem Zeitpunkt abmelden, wird die Hintergrundaufgabe ebenfalls beendet. Wenn Sie einen
disown
Job ausführen , löst bash den Job und lässt ihn weiterlaufen:Sie können dies bestätigen:
Sie können sogar das
&
unddisown
in derselben Zeile kombinieren , z.Dies ist
nohup
meiner Meinung nach besser als das Ausführen , da dadurch keinenohup.out
Dateien im gesamten Dateisystem verstreut bleiben. Außerdemnohup
muss ausgeführt werden , bevor Sie den Befehl ausführen -disown
verwendet werden können , wenn Sie später entscheiden , dass Sie in den Hintergrund wollen und die Aufgabe zu lösen.quelle
Das Tool nohup, das auf den meisten Linux-Boxen verfügbar ist, erledigt dies.
quelle
Um genau zu sein, werde ich auf tmux hinweisen , das die gleiche Grundidee wie screen hat:
Es ist jedoch unendlich viel einfacher, auf Google zu suchen.
quelle
"gnu screen"
als Ihre Suchanfrage funktioniert ganz gut.Der Bildschirm ist zu groß, um Prozesse beim Abmelden am Laufen zu halten.
Versuchen Sie dtach :
quelle
Hier ist eine Möglichkeit, einen Shell-Prozess zu dämonisieren, ohne dass externe Programme erforderlich sind:
Wenn Sie dann Ihre Sitzung schließen, wird der Job wie in der Datei output.txt beschrieben weiter ausgeführt (die Pufferung hat, sodass es eine Weile dauert, bis ein Wert ungleich Null angezeigt wird). Vergiss nicht, deinen Job nach dem Testen zu töten.
Alles, was Sie tun müssen, ist, den Job zu schließen und im Hintergrund zu arbeiten. Um wirklich gut zu sein,
cd /
haltet man sich also nicht an einem Reittier fest.Dies funktioniert auch in einfachen sh unter Solaris.
quelle
-
Operator? Was ist der Unterschied zwischen< /dev/null
und&-
? Ich vermute, dass STDIN (und andere STDOUT und STDERR) im Fall von STDIN entweder eine Datei von< file
oder ein Stream von<& stream
zugewiesen werden könnte. Wäre es< /dev/null
in Ihrem obigen Beispiel dasselbe ? Und bezeichnet der Operator-
oben eine Null als Stream?Der
at
Befehl kann in solchen Situationen hilfreich sein. Geben Sie zum Beispiel Folgendes ein:Anschließend können Sie einen Befehl oder eine Reihe von Befehlen eingeben, die ausgeführt werden. Die Ergebnisse sollten per E-Mail an Sie gesendet werden, wenn die E-Mail-Einstellungen auf dem Computer korrekt sind.
Stattdessen
now
können Sie eine Uhrzeit optional mit einem Datum oder einem Zeitausdruck wie angebennow + 15 minutes
. Sehen Sieman at
für weitere Details.quelle
byobu
Unter Ubuntu gibt es ein nettes Frontend zum Bildschirm. Durch Drücken von Ctrl- erhalten ?Sie eine Liste aller Tastaturkürzel. Es fügt eine Statusleiste hinzu, die nützlich sein kann, um die CPU-Auslastung, den Festplattenspeicher usw. zu überwachen. Insgesamt bietet es eine Erfahrung, die ich als terminalbasierte VNC-Verbindung bezeichnen würde.nohup
Ermöglicht das Starten eines Jobs im Hintergrund, wobei die Ausgabe an eine Protokolldatei weitergeleitet wird, die bei Bedarf immer nach / dev / null umgeleitet werden kann.quelle