Kann in einem Skript festgestellt werden, ob es im GNU-Bildschirm ausgeführt wird?

10

Wir haben einen lang laufenden Prozess auf einem Remote-Server, der von Zeit zu Zeit manuell gestartet wird. Leider sterben Internetverbindungen, Kernel-Panik und eine ganze Reihe anderer Herausforderungen können durch die SSH-Sitzung auftreten, die zum Verbinden und Starten des Jobs verwendet wird.

Der Bildschirm scheint ein perfekter Weg zu sein, um sicherzustellen, dass der Prozess nicht unterbrochen wird. Es ist jedoch ein Problem, sich darauf zu verlassen, dass sich eine Person immer daran erinnert, den Bildschirm zu starten und dann das Skript auszuführen, um den Prozess zu starten. Gibt es eine Möglichkeit, anhand des Skripts zu überprüfen, ob das Skript über den Bildschirm aufgerufen wird? Wenn dies der Fall ist, wird der Vorgang fortgesetzt, andernfalls wird das Skript mit einer Meldung beendet, in der der Benutzer angewiesen wird, zuerst den Bildschirm auszuführen.

cclark
quelle

Antworten:

11

Dafür gibt es eine Umgebungsvariable. Wenn es innerhalb des Bildschirms ausgeführt wird, $TERMwird screen. So einfach ist das; mach einfach ein wenn drauf. Zum Beispiel,

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

wird im Bildschirm eine Echo-Leiste anzeigen; foo sonst.

Falcon Momot
quelle
2
Dies kann auch der Fall sein, screen-256colorwenn der Benutzer die 256-Farben-Unterstützung konfiguriert hat.
mgorven
oder Screen-Bce auf Systemen mit installiertem Byobu. echo $ TERM screen-bce
nelaaro
7

Warum nicht das Skript mit 'nohup' ausführen, während Sie mit dem Bildschirm arbeiten? Dadurch wird auch sichergestellt, dass es weiterhin ausgeführt wird, wenn Sie die Verbindung trennen.

Die Ausgabe erfolgt standardmäßig in einer Datei, sodass Sie bei Bedarf andere Tools zum Überwachen der Skriptausgabe verwenden können.

Magellan
quelle
1
Wenn Sie mit nohup ausgeführt werden, erhalten Sie das gleiche Ergebnis, wenn Sie sicherstellen, dass der Prozess weiterhin ausgeführt wird. Hätte ich nicht immer noch das gleiche Problem, wenn jemand möglicherweise vergisst, das Skript mit nohup auszuführen? Oder gibt es eine Möglichkeit in einem Skript, sicherzustellen, dass 'nohup' verwendet wurde, oder muss ich ein Wrapper-Skript erstellen, das mein ursprüngliches Skript mit nohup aufruft?
Clark
Ja. Während ich meine Padawans (Junior Sysadmins) liebe, wie ich meine Kinder liebe, vergessen sie häufig solche Dinge. So wird alles so verpackt, dass sie sich nicht daran erinnern müssen, welche Dinge sie eingeben müssen, um den wichtigen Befehlen ein Präfix zu geben.
Magellan