20. Feb
Post

Terminal-Session im Hintergrund laufen lassen

Mir fiel vor einiger Zeit eine einfache Möglichkeit in die Hände, mit der man bei Linux eine Terminal-Session im Hintergrund laufen lassen kann.

So ziemlich jeder Linux-Admin, der sich per SSH zu entfernten Linux-Boxen verbindet, führt hin und wieder ein Kommando aus, dass eine längere Ausführungszeit für sich beansprucht. Dies führt nicht selten zu Problemen:

Zunächst mal ist die genutzte Session “belegt”, d.h. bis zum Ende der Befehlsausführung kann kein anderes Kommando ausgeführt werden. Einige Jobs laufen möglicherweise über Stunden (oder sogar Tage!) und man möchte oder kann die Session nicht so lange geöffnet lassen. Selbst wenn man die Session aufrecht erhalten möchte, kommt es immer wieder vor, dass eine Netz- oder Stromunterbrechung zum Beenden der Sitzung führt. Damit ist dann auch die Befehlsausführung beendet und das Spiel beginnt von vorn… wenn dann nicht schon alles im Eimer ist, weil der Job unbedingt hätte durchlaufen müssen.

Natürlich weiß man als Linux-Admin, dass Befehle schon auf einfache Weise in den Hintergrund geschickt werden können: “nohup ./foobar &” erfüllt oft bereits seinen Zweck. Die Ausgabe des Prozesses landet dann automatisch in einer Datei namens “nohup.out“. Leider ist “nohup” nicht in allen Situationen die beste Idee. Vielleicht möchte man zwischendurch in die Befehlsausführung eingreifen. Möglicherweise ist nach einiger Zeit eine Entscheidung oder ein einfacher Tastendruck notwendig. Auch die Ausgabe eines Prozesses kann von Interesse sein, wird aber sinnlos, wenn sie in eine Datei umgeleitet wird.

Praktisch wäre es daher, wenn man eine Konsole benutzen könnte, von der man sich trennen und bei Bedarf wieder verbinden könnte. Eine Session, die nach der Trennung so weiter läuft, als wäre sie noch aktiv…

…darf ich vorstellen – “screen”:

“screen” ist ein Multiplexer, mit dem es möglich ist, mehrere “virtuelle” Sitzungen in einer “echten” Terminal-Sitzung zu benutzen. Dabei verhält sich jede dieser Sitzungen wie eine ganz normale Session. Die Besonderheit ist hier, dass man zwischen den einzelnen Sitzungen hin und her springen kann. Besser noch: Man kann Sitzungen “detachen”, also trennen und die Terminal-Session im Hintergrund laufen lassen. Später kann die Sitzung dann “re-attached” und wie gewohnt weiter verwendet werden.

Die aktuelle Manpage zu “screen” ist ca. 2500 Zeilen lang, daher beschränke ich mich hier auf die wichtigsten Kommandos. Den Rest kann jeder selbst über “man screen” nachlesen.

  • screen
    Über diesen Befehl wird eine neue screen-Session gestartet. Es erscheint zunächst ein Willkommens-Bildschirm und danach erhält man wieder eine normale Konsole, der man erst mal nicht ansieht, dass es sich um eine screen-Sitzung handelt. Wird in dieser Sitzung “exit” eingegeben, terminiert die Session.
  • Steuerung-a d
    Wird in einer aktiven screen-Sitzung die Tastenkombination “Steuerung-a” und dann “d” gedrückt, erscheint der Hinweis “[detached]” und man befindet sich wieder in der Sitzung, in der zuvor “screen” gestartet wurde. Gleichzeitig läuft die Terminal-Session im Hintergrund weiter.
  • screen -ls
    Dieser Befehl listet alle aktiven screen-Sessions und ihren attached/deattached-Status auf.
  • screen -r
    Über dieses Kommando kann man sich zu einer detached-screen-Session verbinden lassen. Funktioniert nur, wenn genau eine screen-Session existiert.
  • screen -r {name}
    {session} bezeichnet hier den Session-Namen, der von “screen -ls” ausgegeben wurde. Standardmäßig wird der Name im Format pid.tty.host generiert.
  • screen -S {name}
    Über dieses Kommando kann man einen eigenen Sitzungsnamen vergeben. Erleichtert “screen -r {name}”.
  • screen -x {name}
    Mit diesem coolen Kommando kann man sich mit einer Sitzung verbinden, zu der bereits an anderes Terminal verbunden ist. Quasi ein “Mirror-Modus” zur Spiegelung. Man kann dann z.B. gemeinsam mit jemand anderem in der Sitzung arbeiten. Beide sehen das Gleiche und können gleichberechtigt in der Session arbeiten.

Wie gesagt, die Manpage ist lang und das Programm ist vielfältig einsetzbar. Weitere Features sind das Toggeln, also das Hin- und Herschalten zwischen Sessions, Passwort-Absicherung gegen unbefugten screen-Zugriff, ACLs für unterschiedliche User/Gruppen und zahlreiche Optionen für die Verwendung unter X11. Dazu kommen noch Features, mit denen ich mich bisher noch gar nicht beschäftigt habe.

“screen” liegt so ziemlich allen gängigen Distributionen bei und ist oft bereits vorinstalliert. Es ist für mich vollkommen ausreichend, um “unterbrechungsfrei” remote arbeiten zu können. Ein Beispiel: Es ist mir endlich möglich, über SSH mit “vi” eine Datei geöffnet zu halten und meinen Laptop kurzerhand ausschalten zu können, ohne mich danach mit dem Locking von vi auseinandersetzen zu müssen, weil die Datei nicht ordnungsgemäß geschlossen wurde. Dank “screen” ist die Datei nämlich immer noch geöffnet und vi immer noch aktiv. Ein “re-attach” genügt.

GD Star Rating
lädt…

Das könnte Dich ebenfalls interessieren:

Veröffentlicht in: IT / Technology

Über den Autor:

Beruflich arbeite ich als Premium Support Engineer bei Novell. Seit 2008 schreibe ich in diesem privaten Blog über Linux, Software, Programmierung, Suchmaschinen-Optimierung und über alles, was mir außerdem an IT-Themen begegnet. Darüber hinaus blogge ich hier auch über meine Hobbies, meine Meinung zu Filmen, Musik und was mir sonst so vor die Flinte kommt.

3 Kommentare zu "Terminal-Session im Hintergrund laufen lassen"

Trackback | Kommentar RSS Feed

  1. Michael H. sagt:

    Um einen Screen zu detachen, drückt man eigentlich Steuerung-A + “D”. Nicht “C” ;-)

    “C” erzeugt (Create) einen neuen Terminal. D verlässt ihn (Detach).

    lg, Michi

  2. Stefan H. sagt:

    Vielen Dank für die prägnante Einführung. Genau das was ich gesucht habe.

Schreibe einen Kommentar