Programme so ausführen, dass sie beim Logout nicht beendet werden

Zuletzt geändert von Aysegül Omus am 2023/10/26 13:55

Hier wird beschrieben, wie man in der Rechnerhalle Programme ausführen kann, die nach dem Logout weiterlaufen. Dies geschieht indem diese auf einem Server gestartet werden, welcher identisch zu den Rechnern in der Halle konfiguriert ist.

1. Allgemeines

Möchte man im Rahmen seines Studiums mal ein rechenintensives Program beispielsweise über die Nacht laufen lassen, so ist es grundsätzlich problemlos möglich, sofern man die folgenden Punkte beachtet:

  • um sich mit der lxhalle per SSH zu verbinden muss die unten stehende Zeile mit Ihrem cit.tum-Login (Icit/ITO-Login) ins Terminalfenster eingegeben werden - Windows Benutzer finden hier ein HowTo, um sich das Programm PuTTY einzurichten, mit dem ssh Verbindungen per Terminalfenster möglich werden.
ssh ITO-Kennung@lxhalle.in.tum.de 
  • damit die Programme die Arbeit anderer Rechnerbenutzer nicht behindern, sollten sie mit einer niedrigen scheduling-Priorität gestartet werden - dies wird durch den Aufruf von "nice -n 19", wie bei den Beispielen in diesem HowTo erreicht 

2. Beispielskript

Um die Funktionalität der hier Vorgestellten Methoden zu demonstrieren, wurde ein kleines Shell-Skript test.sh geschrieben, welches nichts anderes tut, als jede Sekunde die aktuelle Uhrzeit + Datum in die Datei datum.txt zu schreiben. Dieses Skript symbolisiert ein beliebiges Programm, welches auf der Konsole laufen könnte. Das Skript besteht aus folgenden Zeilen:

#!/bin/bash while true do sleep 1 date done >> datum.txt

3. nohup

Wird ein Programm mit dem nohup Befehl gestartet, so ignoriert es dann das HUP-Signal, welches beim Ausloggen gesendet wird. Dadurch läuft das Programm weiter, auch wenn sich der Benutzer, der es gestartet hat, bereits ausgeloggt hat.

  • durch die Eingabe von nice -n 19 nohup ./test.sh & wird das Test-Skript gestartet und von der Konsole entbunden (durch &)
  • ab jetzt wird das Datum in die Datei datum.txt geschrieben, auch nachdem man sich ausgeloggt hat
  • nach dem Ausführen von nohup wird uns zusätzlich die PID des erzeugten Prozesses mitgeteilt, was nützlich sein kann, um das Programm (falls es nicht von alleine terminiert) mit der kill PID Anweisung zu beenden
  • jetzt kann im Terminalfenster weiter gearbeitet werden - das Terminal kann natürlich auch geschlossen werden, ohne das das Programm beendet wird
  • loggt man sich aus und wieder ein, kann man überprüfen, ob in die Datei datum.txt weiterhin geschrieben wird
  • https://xwiki.rbg.tum.de/bin/download/Informatik/Helpdesk/ProgrammeBeimLogoutNichtBeenden/WebHome/nohupTest.png

4. screen

Der screen-Befehl ermöglicht es, im Terminalfenster mehrere screen-Sitzungen zu erstellen, die wiederum mehrere (bis 10) virtuelle Konsolen enthalten können. In diesen Konsolen können Programme gestartet werden, welche, nachdem man die Sitzung vom Terminalfenster löst, auch nach dem Logout erhalten bleiben.

 Zunächst werden einige grundlegenden Steuerungsbefehle vorgestellt:

  • screen starten:
    • nice -n 19 screen 
    • eine selbstbenannte Sitzung (hier sitzung1) durch folgende Befehlseingabe
    • nice -n 19 screen -S sitzung1
  • es werden zwar am Anfang einige Informationen über das Programm angezeigt, nachdem man jedoch die Leertaste betätigt schaut die Konsole unverändert aus - man hat nun eine screen-Sitzung gestartet und befindet sich in der ersten virtuellen Konsole
  • eine weitere virtuelle Konsole starten
    • Strg + A und dann C
  • eine virtuelle Konsole schließen
    • Strg + A und dann K
  • zwischen den virtuellen Konsolen wechseln:
    • Strg + A und dann Leertaste
    • Strg + A und dann Zahl zw. 0 und 9 (für die entsprechende Konsole)
  • Verbindung zur aktuellen Sitzung lösen (deattach):
    • Strg + A und dann D
    • für eine bestimmte Sitzung (hier sitzung1): screen -d sitzung1
  • Verbindung zu einer Sitzung wiederaufnehmen (hier sitzung1)
    • screen -r sitzung1
  • Sitzung beenden
    • Strg + D
    • exit
    • die letzte virtuelle Konsole schließen
  • alle laufenden Sitzungen mit ihren Namen anzeigen (im Bild z.B: 6561)
    •  screen -ls 
    •  
    • https://xwiki.rbg.tum.de/bin/download/Informatik/Helpdesk/ProgrammeBeimLogoutNichtBeenden/WebHome/screen.jpg
  • alle Tastaturbefehle anzeigen
    • Strg + A und dann ? eingeben
  • für die vollständige Dokumentation des screen-Befehls möchte ich auf die manpages verweisen:    man screen

 Vorgehen bei Benutzung von screen (Befehle siehe oben):

  • Programme starten
    • Terminalfenster aufrufen
    • screen starten - dadurch ist man automatisch in einer Sitzung, die "Attached" ist
    • Programm ausführen
    • gegebenfals neue Konsolen und Programe starten
    • die Verbindung zur aktuellen Sitzung lösen
    • Terminalfenster schließen
  • Programme beenden
    • Terminalfenster aufrufen
  • alle laufenden screen-Sitzungen anzeigen
    • die gewünschen Sitzungen wiederaufnehmen
    • die Programme in den Virtuellen Konsolen beenden (falls sie nicht von selbst terminieren)
    • die virtuellen Konsolen schließen bzw. die Sitzung beenden
    • Terminalfenster schließen