Wie führe ich ein Skript über SSH aus, das nicht endet, wenn ich die Verbindung beende?

18

Ich muss ein Skript ausführen, dessen Ausführung sehr lange dauert, oder ich möchte, dass es für immer ausgeführt wird. Ich kann nicht einfach eine SSH-Verbindung zu meinem Computer herstellen, da er beim Trennen der Verbindung nicht mehr ausgeführt wird.

Gibt es eine Möglichkeit, ein Skript auszuführen, das nicht von der Shell abhängt, von der es gestartet wurde?

Ich benutze Ubuntu 9.04.

Jakub Arnold
quelle

Antworten:

24

Sie können den Befehl mit dem Befehl nohup davor ausführen. Sie können es auch in 'screen' ausführen, wodurch Sie das Terminal wieder anschließen können.

Beispielsweise:

ssh mySever 'nohup bash myscript.sh'

Oder rufen Sie einfach den Befehl nohup auf und führen Sie ihn aus. Es sollte weiterlaufen, auch wenn Sie die Verbindung trennen. Dies liegt daran, dass der Nohup den SIGHUP-Singal (Hangup) abfängt.

Der Bildschirm ist etwas komplizierter, aber für die 20 Minuten, die Sie möglicherweise zum Erlernen der Grundlagen benötigen, ist er eines der nützlichsten Tools auf dem Markt. Hier ist ein Tutorial .

Kyle Brandt
quelle
Geschnappt von Kyle ...> smile <
Evan Anderson
+1 an jeden, der Evan schnüffelt. Happy 10K :)
squillman
1
Die Verknüpfung zum Tutorial ist unterbrochen :(
Ido Ran
7

Ich benutze immer nur nohup. Wenn mir die Ausgabe wichtig ist, leite ich sie in eine Protokolldatei um, andernfalls sende ich sie an / dev / null.

Beispiel:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Das versetzt es in den Hintergrund, wobei die Ausgabe nach / dev / null geht, und es ist immun gegen das HUP-Signal, wenn Sie sich ausloggen. Sie können den Job auch mit bestimmten Shells "ablehnen" (z. B. Bash), damit er nicht mit Ihrer Sitzung verbunden ist.

disown %1
m0j0
quelle
1
+1 für disown - sehr nützlich , wenn Sie vergessen , mit nohup zu laufen
Mark
5

So installieren Sie den Bildschirm: apt-get install screen

Dann starten Sie einfach mit: screen

Und man screenum die Schlüsselbindung zu bekommen.

Disko
quelle
+1! Bildschirm ist da Ding!
Javier
Früher habe ich screen verwendet, aber aus verschiedenen Gründen auf tmux umgestellt. Google „tmux vs Bildschirm“ und Sie werden einige Links wie diese finden: superuser.com/questions/236158/tmux-vs-screen
m0j0
2

Wenn Sie bei einem Server angemeldet sind, können Sie ein Skript mit dem folgenden Befehl im getrennten Modus ausführen:

nohup script >script.out 2>script.err &

Wenn Sie sich später erneut anmelden, können Sie script.out auf Ausgaben und script.err auf Fehlermeldungen überprüfen. Wenn Sie Ausgabe- und Fehlermeldungen in derselben Datei erhalten möchten, gehen Sie folgendermaßen vor:

nohup script >script.out 2>&1 &
Michael Dillon
quelle