Lassen Sie das Bash-Skript auf dem Remote-Terminal laufen, während Sie nicht angemeldet sind?

14

Ich habe ein Bash-Skript, dessen Ausführung mehrere Stunden dauert. Während es läuft, möchte ich andere Dinge tun, die das Abmelden oder Trennen vom Internet beinhalten können (mein Skript führt Netzwerktests auf verschiedenen Computern durch).

Ich verstehe, dass es einen Befehl gibt, mit dem ich meine Tests von einem Remote-Terminal ausführen und mich vom Terminal abmelden kann, während es ausgeführt wird. Weiß jemand, was dieser Befehl ist?

Ritwik Bose
quelle

Antworten:

17

Der gesuchte Befehl lautet nohup.

Es gibt auch eine screen, die für den Fall vorgesehen ist, dass Sie etwas laufen lassen möchten, aber später zurückkehren und interaktiv eine neue Verbindung herstellen möchten.

nohupDies ist einfacher, wenn ein Befehl nach dem Start keine Benutzereingaben erwartet, und screenbesser, wenn Sie das Programm interaktiv ausführen möchten.

Justin Smith
quelle
Ich habe mir gerade nohup angesehen und anscheinend gibt es Probleme mit Ein- und Ausgaben, die dazu führen können, dass das Skript aufhängt. Ich habe auch etwas über den Bildschirm gesehen, was mir als das auffällt, worüber ich vorher gelesen hatte. Weißt du, wie man eines davon benutzt?
Ritwik Bose
1
nohup ist für den Fall gedacht, dass ein Skript keine Benutzereingaben erwartet - es speichert alle Ausgaben in einer Datei. Der Bildschirm ist für den Fall vorgesehen, dass Sie etwas laufen lassen möchten, aber später zurückkehren und interaktiv neu anfügen möchten. nohup ist einfacher, wenn ein Befehl nach dem Start keine Benutzereingaben erwartet, und screen ist besser, wenn Sie das Programm interaktiv ausführen können möchten.
Justin Smith
Ah fand es. Für den Bildschirm ist es Strg-A d, um die Verbindung zu trennen, und -r + pid, um die Verbindung wiederherzustellen.
Ritwik Bose
Gute Antwort. Sie sollten den Bildschirmkommentar zu Ihrer Antwort hinzufügen, damit er besser zur Geltung kommt.
DaveParillo
1

Ich benutze nohupdafür. In meinem Fall hatte ich ein Python-Skript namens action.py Ich habe das Skript auf einem Remote-Server ausgeführt, mit dem nohup python action.py & ich dann das Terminal schließen würde. Später, wenn die Ausführung beendet ist, können Sie alle Ausgaben des Prozesses sehen, in nohup.outdem sie im selben Verzeichnis wie erstellt werden action.py. Ist die Datei bereits vorhanden, wird eine weitere Ausgabe angehängt.

Der einzige Haken ist, nicht zu wissen, wann das Skript seinen Lauf genommen hat. In meinem Fall ließ ich mir nach Abschluss eine E-Mail schreiben. Hoffe das hat jemandem geholfen!

Bryan J
quelle
0

Was passiert, wenn Sie vergessen haben, den nohupBefehl zu Beginn Ihres Befehls hinzuzufügen ?

Angenommen, Sie haben den folgenden langen Befehl ausgeführt:

Der Beginn der Ausgabe eines langen Befehls

Dies wird aufgerufen, da dies ls -Ral /alle Dateien und alle Ordner, einschließlich der ausgeblendeten, mit einem langen Format auflisten soll, das rekursiv vom Stammordner aus beginnt. Es könnte eine Weile dauern.

Drücken Sie einfach ctrl+ Z.

Stoppen des Langbefehls

Wie bekommst du es zurück?

Der Befehl, um es wieder in den Vordergrund zu bringen, lautet fg.

Kommando zurückholen


quelle