Erneutes Anfügen oder Erstellen einer benannten Bildschirmsitzung? (oder dauerhafte Bildschirmsitzungen)

27

Grundsätzlich habe ich eine Remote-Bildschirmsitzung, zu der ich automatisch eine erneute Verbindung herstellen möchte. Derzeit wird dies mit dem folgenden Befehl ausgeführt (als iTerm-Lesezeichen oder als Alias).

ssh host -t screen -x thesessionname

Dies funktioniert einwandfrei, aber wenn die Sitzung aus irgendeinem Grund abbricht, möchte ich, dass sie beim nächsten Herstellen einer Verbindung erneut erstellt wird. Die -RFlagge für screenist fast perfekt:

ssh host -t screen -R -S thesessionname

..aber wenn die Sitzung bereits angehängt ist, wird eine zweite Sitzung erstellt (so -Reinfach sieht die erste getrennte Sitzung aus, wenn keine gefunden wird, wird eine neue erstellt)

Gibt es eine Möglichkeit, die -RMarkierung auch für angehängte Sitzungen aussehen zu lassen und nur dann eine neue zu erstellen, wenn thesessionnamesie nicht vorhanden ist?

Wenn dies nicht einfach möglich ist, wie kann ich die Bildschirmsitzung automatisch neu erstellen, wenn sie stirbt? Vielleicht ein Skript, das über cron ausgeführt wird und nach der benannten Sitzung sucht und diese erstellt, sollte sie nicht existieren?

dbr
quelle

Antworten:

32

Sagen Sie dem Bildschirm, dass er beim Ausprobieren etwas beharrlicher sein soll:

-D -R
    Attach here and now. In detail this means: If a session is run-
    ning,  then  reattach.  If necessary detach and logout remotely
    first.  If it was not running create it and  notify  the  user.
    This is the author's favorite.

Kombinieren Sie also die beiden und Sie sollten Ihre Lösung haben ("-DR" entspricht "-D -R"):

screen -DR <yoursession> 

Zusätzlich und nützlich zu wissen, können Sie laufende Sitzungen anzeigen mit:

screen -ls
Dan Carley
quelle
5
Perfekt, habe screen -x -R -S mainich letztendlich verwendet (funktioniert genauso ohne das erzwungene Ablösen), danke!
dbr
Manchmal möchten Sie verwenden sceen -r <yoursession>, wird ein Fehler angezeigt, wenn es bereits angehängt ist (anstatt eine neue Sitzung zu erstellen).
Gefahr89
11

Ein paar gute Möglichkeiten. Zunächst mein Favorit:

screen -x -R

Dies wird an die erste verfügbare Bildschirmsitzung angehängt (Freigabe, wenn eine andere Verbindung verbunden ist). Wenn überhaupt keine Bildschirmsitzungen vorhanden sind, starten Sie eine neue.

screen -d -RR

In den zugehörigen Dokumenten heißt es: "Eine Sitzung erneut anfügen und bei Bedarf trennen oder erstellen. Verwenden Sie die erste Sitzung, wenn mehr als eine Sitzung verfügbar ist." Grundsätzlich sorgt das Doppel-R dafür, dass nach der ersten Sitzung gesucht wird, zu der eine Verbindung hergestellt werden soll.

screen -D -RR

"Hier und jetzt anhängen. Was auch immer das bedeutet, tu es einfach." Trennt alle anderen verbundenen Sitzungen und meldet sie remote ab und stellt eine Verbindung zur ersten Sitzung her, die möglich ist. Grundsätzlich wird alles getan, was zum Anhängen an eine vorhandene Sitzung erforderlich ist, und eine neue Sitzung erstellt, wenn nichts vorhanden ist.

Das allererste (-x -R) verursacht mit der geringsten Wahrscheinlichkeit Probleme (es löst nicht die Verbindung zu Ihrer anderen Verbindung), hängt sich aber einfach immer an etwas an, wenn es etwas zu befestigen gibt, und erstellt etwas, wenn es nichts zu befestigen gibt.

freiheit
quelle
1
Dies sind alles nette / praktische Optionen, aber keine von ihnen beantwortet die ursprüngliche Frage, die darin bestand, eine Verbindung zu einer Sitzung mit Namen (wieder) herzustellen .
Daniel
5

ich benutze

screen -dRRS sessname

Ich möchte nicht, dass mein gesamtes Login auf der anderen Shell gelöscht wird, wie es der -DFall ist, und ich möchte definitiv nicht den Multi-Attach-Modus von -x.

Chaos
quelle