SSH-Hintergrundaufgabe / -jobs fortsetzen, wenn SSH geschlossen wird

39536
Huei

Ich habe die gleiche Frage wie hier, aber auch darüber hinaus.

Wenn ich die SSH-Verbindung abmelden / beenden, muss mein Programm im Hintergrund ausgeführt werden. Vor dem Beenden tippe ich bgund jobs, um die im Hintergrund ausgeführte Task zu prüfen, aber nach dem Beenden von SSH wird das Programm nicht ausgeführt. Es wird geschlossen, wenn ich das SSH-Fenster schließe.

Was kann ich tun, wenn mein Programm nach dem Schließen des SSH-Fensters noch laufen soll? Ich benutze nohup screenaber es funktioniert auch nicht, oder fehlt mir etwas?

24
Willkommen bei Super User! Bitte geben Sie Ihre Antwort nicht in die Frage ein. Poste es als Antwort unten, sobald du kannst (in etwa 7 Stunden) mit der Taste ** Beantworte deine Frage **. Vielen Dank. (Beachten Sie auch, dass es nicht notwendig ist, `
` s zu Ihrem Beitrag hinzuzufügen. Erstellen Sie einfach nach Bedarf Absätze. Wenn Sie dabei sind, verwenden Sie bitte die richtige Großschreibung. Dadurch werden Ihre Beiträge leichter lesbar.) slhck vor 11 Jahren 0
Übrigens müssen Sie nicht 'bg' oder 'nohup' verwenden, wenn Sie 'screen' verwenden. Auch [diese Frage] (http://superuser.com/questions/631759/remote-sharing-of-a-terminal/631764) steht in Verbindung. justbrowsing vor 11 Jahren 0
Überprüfen Sie diesen Thread @ Stack-Überlauf http://stackoverflow.com/questions/285015/linux-prevent-a-background-process-from-being-stopped-after-closing-ssh-client Ashildr vor 11 Jahren 0

4 Antworten auf die Frage

38
justbrowsing

Wenn Sie screenmüssen Sie lösen mit CTRL+A+ Dvor dem Beenden ssh.

Wenn Sie einen Prozess direkt mit dem Bildschirm ausführen möchten, können Sie alternativ verwenden

screen -dmSL [session name] [commands] 
  • -d startet eine Bildschirmsitzung und löst sich sofort davon
  • -m Erzwingt die Erstellung einer neuen Bildschirmsitzung
  • -S können Sie der Sitzung einen Namen geben
  • -L schaltet die Anmeldung an ein ~/screenlog.0

Beispiel:

screen -dmSL workstuff myscript.sh 

Sie können dann entweder:

später fortsetzen mit screen -x workstuff

oder

Überprüfen Sie die Protokolldatei less -r ~/screenlog.0

13
evamvid

Verwenden tmux. Ich bin mir nicht mal sicher, ob screenes überhaupt noch aktiv ist. Es ist eine Art Vorzugssache, aber als jemand, der es benutzt tmux, kann ich bezeugen, dass es sich in etwa 5 Minuten eingerichtet hat und perfekt funktioniert hat.

Auf einem Debian-basierten System (auf dem Remote-Computer):

sudo apt-get install tmux

Geben Sie dann tmuxeingeben, Lauf, was Prozess, den Sie brauchen, und drücken Sie Ctrl+ Bdann D(dies lässt die tmux Sitzung). Dann können Sie sich von SSH abmelden.

Wenn Sie zurückkommen oder nochmals nachschauen müssen, starten Sie SSH und geben Sie ein tmux attach. Es wird Sie zurück zu Ihrer tmuxSitzung bringen.

tmuxhat viel mehr Möglichkeiten, wie hier detailliert beschrieben. Dies sollte jedoch Ihr unmittelbares Problem lösen.

Viel Glück!

6
Huei

Zum Schluss habe ich es gelöst mit screen:

Trennen Sie es im Bildschirmmodus mit CtrlAD. Dann können Sie das SSH-Fenster schließen.

5
Ashildr

nohup use: Der erste der folgenden Befehle startet das Programm abcd im Hintergrund so, dass das nachfolgende Abmelden es nicht anhält.

$ nohup abcd &

$ exit