Homeserver 26: Prozesse unbeaufsichtigt im Hintergrund laufen lassen

Lange laufende Prozesse am Server bereiten ein kleineres Problem. Das ist mir insbesondere aufgefallen, als ich die Hashwerte mit den Daten prüfen wollte. Dieser Prozess hat länger als einen Tag gedauert, und in der Zeit muss die SSH-Verbindung offen bleiben, also auch der Rechner hier weiter laufen. Wäre mir zwischenzeitlich mein Windows-PC abgestürzt, hätte ich von vorn beginnen können.

Aber, dieses Problem kann gelöst werden, mit virtuellen Terminals. Und wie dies geht, werde ich in diesem Artikel erklären.

Screen

Screen ist ein ziemlich umfangreiches Werkzeug. Man kann fast beliebig viele virtuelle Fenster erstellen, man kann auch mit mehreren Personen an so einem Fenster arbeiten. Das macht z. B. Sinn, wenn Person A jemandem etwas zeigen will, wie z. B. eine bestimmte Software funktioniert, und Person B und einige weitere sind ebenfalls an diesem Fenster angemeldet und können die Vorgänge nachvollziehen.

Für mich ist jetzt erst einmal nur die Möglichkeit wichtig, ein Fenster zu erstellen, und dieses dann von der Sitzung zu entkoppeln, so dass ich die SSH-Sitzung schließen kann. Später kann ich über SSH das Fenster wieder aufrufen und dort weiter arbeiten.

Zunächst muss Screen aber erst mal installiert werden:

sudo apt-get install screen

Aufruf

Es gibt mehrere Möglichkeiten, Screen aufzurufen. Gibt man „screen“ ohne irgendwelche Parameter auf, so wird einfach ein Fenster erzeugt, in dem man schon arbeiten könnte. Man kann auch mit screen und einem Befehl dahinter sofort eine Aufgabe an ein virtuelles Terminal übergeben. Ich habe beide Methoden probiert und hinterher etwas Schwierigkeiten gehabt, die Fenster aus dem Hintergrund wieder hervorzuholen. Denn dazu müsste ich den Namen angeben, und das ist bei automatisch erzeugten Fenstern nicht ganz trivial. Stattdessen erzeuge ich ein Fenster, welches gleich einen zur Aufgabe passenden Namen bekommt:

screen -S Hash

Nun habe ich ein leeres Terminal und kann, wie der Name des Terminals schon sagt, die Erstellung der Hashwerte einleiten. Also gebe ich an der Befehlszeile ein:

sudo hashdeep -re /raid1/daten >hashset.txt

Wie ich schon sagte, dieses Programm läuft lange, länger jedenfalls, als ein Tag. Und so lange möchte ich weder das Terminal offen lassen, noch den PC. Daher verfrachte ich das virtuelle Terminal in den Hintergrund, ich entkopple es also von der SSH-Sitzung, und kann die SSH-Sitzung dann problemlos schließen.

Screen lässt sich ganz einfach mit Tastenbefehlen steuern. Jeder Befehl beginnt mit einem STRG+a gefolgt von einem Buchstaben oder einer Kombination. Eine Liste der Tastenbefehle bekommt ihr, wenn ihr STRG+a ? eingebt. Ich möchte jetzt das Terminal entkoppeln, dafür drücke ich STRG+a d. Nun ist das Terminal abgekoppelt und ich kann SSH beenden und den PC abschalten, der Hash-Vorgang läuft auf dem Server aber weiter.

Wieder verbinden

Auch hier gibt es mehrere Möglichkeiten.

screen -r

Dieser Befehl ist dann sinnvoll, wenn man sowieso nur ein Fenster offen hatte. Es wird dann sofort verbunden. Hat man mehrere Fenster im Hintergrund laufen, so hilft der Befehl „screen -ls“ herauszufinden, welche Fenster da sind und wie diese heißen. Wie mein Fenster heißt, weiß ich ja, ich habe es ja entsprechend gestartet.

screen -r Hash

Nun bin ich wieder mit meinem Fenster verbunden und kann sehen, ob der Hash-Vorgang noch läuft, oder ob er schon beendet ist. Läuft er noch, kann ich das Fenster ja wieder abkoppeln. Ist der Vorgang aber schon beendet, kann ich das Fenster ja beenden, also, wie es in der Linux-Welt so brutal heißt, killen! 🙂 Also kille ich das Fenster mit STRG+a k. Dann werde ich noch gefragt, ob ich das wirklich will, und dann ist das Terminal auch beendet. Dies kann man leicht mit „screen -ls“ herausfinden.

Fazit

Man kann mit Screen noch eine Menge toller Sachen machen, wie z. B. am Terminal eines Rechners verbunden sein, der irgendwo auf der Welt steht, gemeinsam an Dokumenten Arbeiten und vieles mehr. Aber für mich ist erst mal nur von Bedeutung, dass ich lange laufende Prozesse im Hintergrund ablaufen lassen kann, ohne dass mein Windows-PC und mein SSH-Fenster offen sein müssen.