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

Zeige letzte Bearbeiter
1 = =
2
3 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.
4
5
6
7 {{toc/}}
8
9
10
11 == 1. Allgemeines ==
12
13 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:
14
15 * 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>>https://xwiki.rbg.tum.de/bin/view/Informatik/Helpdesk/Ssh_mit_PuTTY]] ein HowTo, um sich das Programm PuTTY einzurichten, mit dem ssh Verbindungen per Terminalfenster möglich werden.
16
17 {{code language="none"}}
18 ssh ITO-Kennung@lxhalle.in.tum.de
19 {{/code}}
20
21 * 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
22
23 {{html wiki="true"}}
24 <hr />
25 {{/html}}
26
27
28 == 2. Beispielskript ==
29
30 Um die Funktionalität der hier Vorgestellten Methoden zu demonstrieren, wurde ein kleines Shell-Skript {{code language="none"}}test.sh{{/code}} geschrieben, welches nichts anderes tut, als jede Sekunde die aktuelle Uhrzeit + Datum in die Datei {{code language="none"}}datum.txt{{/code}} zu schreiben. Dieses Skript symbolisiert ein beliebiges Programm, welches auf der Konsole laufen könnte. Das Skript besteht aus folgenden Zeilen:
31
32 {{code language="none"}}
33 #!/bin/bash while true do sleep 1 date done >> datum.txt
34 {{/code}}
35
36 ----
37
38 {{id name="NohupAnchor"/}}
39
40 == 3. nohup ==
41
42 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.
43
44 * durch die Eingabe von {{code language="none"}}nice -n 19 nohup ./test.sh & {{/code}}wird das Test-Skript gestartet und von der Konsole entbunden (durch ##&##)
45 * ab jetzt wird das Datum in die Datei {{code language="none"}}datum.txt{{/code}} geschrieben, auch nachdem man sich ausgeloggt hat
46 * nach dem Ausführen von {{code language="none"}}nohup{{/code}} 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 {{code language="none"}}kill PID{{/code}} Anweisung zu beenden
47 * jetzt kann im Terminalfenster weiter gearbeitet werden - das Terminal kann natürlich auch geschlossen werden, ohne das das Programm beendet wird
48 * loggt man sich aus und wieder ein, kann man überprüfen, ob in die Datei {{code language="none"}}datum.txt{{/code}} weiterhin geschrieben wird
49
50 * [[image:https://xwiki.rbg.tum.de/bin/download/Informatik/Helpdesk/ProgrammeBeimLogoutNichtBeenden/WebHome/nohupTest.png]]
51
52 ----
53
54 == 4. screen ==
55
56 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.
57
58
59 Zunächst werden einige grundlegenden Steuerungsbefehle vorgestellt:
60
61 * screen starten:
62 ** {{{}}}{{code language="none"}}nice -n 19 screen {{/code}}
63 ** eine selbstbenannte Sitzung (hier sitzung1) durch folgende Befehlseingabe
64 ** {{code language="none"}}nice -n 19 screen -S sitzung1{{/code}}
65
66 * 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
67
68 * eine weitere virtuelle Konsole starten
69 ** ##Strg## + ##A## und dann ##C##
70
71 * eine virtuelle Konsole schließen
72 ** ##Strg## + ##A## und dann ##K##
73 * zwischen den virtuellen Konsolen wechseln:
74 ** ##Strg## + ##A## und dann ##Leertaste##
75 ** ##Strg## + ##A## und dann Zahl zw. 0 und 9 (für die entsprechende Konsole)
76 * Verbindung zur aktuellen Sitzung lösen (deattach):
77 ** ##Strg## + ##A## und dann ##D##
78 ** für eine bestimmte Sitzung (hier sitzung1): {{code language="none"}}screen -d sitzung1{{/code}}
79
80 * Verbindung zu einer Sitzung wiederaufnehmen (hier sitzung1)
81 ** {{code language="none"}}screen -r sitzung1{{/code}}
82 * Sitzung beenden
83 ** ##Strg## + ##D##
84 ** {{code language="none"}}exit{{/code}}
85 ** die letzte virtuelle Konsole schließen
86 * alle laufenden Sitzungen mit ihren Namen anzeigen (im Bild z.B: 6561)
87 ** {{code language="none"}} screen -ls {{/code}}
88 **
89 ** [[image:https://xwiki.rbg.tum.de/bin/download/Informatik/Helpdesk/ProgrammeBeimLogoutNichtBeenden/WebHome/screen.jpg]]
90 * alle Tastaturbefehle anzeigen
91 ** ##Strg## + ##A## und dann ##?## eingeben
92 * für die vollständige Dokumentation des screen-Befehls möchte ich auf die manpages verweisen:    {{code language="none"}}man screen{{/code}}
93
94 Vorgehen bei Benutzung von screen (Befehle siehe oben):
95
96 * Programme starten
97 ** Terminalfenster aufrufen
98 ** screen starten - dadurch ist man automatisch in einer Sitzung, die "Attached" ist
99 ** Programm ausführen
100 ** gegebenfals neue Konsolen und Programe starten
101 ** die Verbindung zur aktuellen Sitzung lösen
102 ** Terminalfenster schließen
103 * Programme beenden
104 ** Terminalfenster aufrufen
105 * alle laufenden screen-Sitzungen anzeigen
106 ** die gewünschen Sitzungen wiederaufnehmen
107 ** die Programme in den Virtuellen Konsolen beenden (falls sie nicht von selbst terminieren)
108 ** die virtuellen Konsolen schließen bzw. die Sitzung beenden
109 ** Terminalfenster schließen
110
111 {{html wiki="true"}}
112 <hr />
113 {{/html}}