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


Grundsätzlich habe ich eine Remote-Bildschirmsitzung, an die ich mich automatisch anhängen möchte. Momentan mache ich das mit dem folgenden Befehl (als iTerm-Lesezeichen oder Alias)

ssh host -t screen -x thesessionname

Das funktioniert gut, aber wenn die Sitzung aus irgendeinem Grund ausfällt, möchte ich, dass sie beim nächsten Verbindungsaufbau neu erstellt wird. Das -R Flagge für screen ist fast perfekt:

ssh host -t screen -R -S thesessionname

..wenn die Sitzung bereits angehängt ist, wird eine zweite Sitzung durchgeführt (z. B. -R Einfaches Suchen nach der ersten abgelösten Sitzung, wenn keine gefunden wird, wird eine neue erstellt.)

Gibt es eine Möglichkeit, das zu machen? -R flag sucht auch nach angehängten Sitzungen und erstellt nur dann eine neue, wenn thesessionname existiert nicht?

Wenn dies nicht leicht zu bewerkstelligen ist, wie könnte ich die Bildschirmsitzung automatisch neu erstellen, wenn sie stirbt? Vielleicht läuft ein Skript über cron, das nach der benannten Sitzung sucht und sie erstellt, sollte sie nicht existieren?


23
2017-07-09 16:13


Ursprung




Antworten:


Sagen Sie dem Bildschirm, dass er etwas beharrlicher sein sollte:

-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.

Kombiniere die beiden und du solltest deine 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

27
2017-07-09 16:17



Perfekt, screen -x -R -S main ist was ich benutzt habe (funktioniert das gleiche ohne die erzwungene Trennung), danke! - dbr
Manchmal möchten Sie verwenden sceen -r <yoursession>, gibt einen Fehler, wenn es bereits angehängt ist (anstatt eine neue Sitzung zu erstellen). - danger89


Ein paar gute Möglichkeiten. Erstens, mein Favorit:

screen -x -R

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

screen -d -RR

Docs für das sagen "eine Sitzung erneut anfügen und wenn erforderlich trennen oder erstellen. Verwenden Sie die erste Sitzung, wenn mehr als eine Sitzung verfügbar ist." Im Grunde sucht das Doppel-R nach der ersten Sitzung, an die es angehängt werden soll.

screen -D -RR

"Attach hier und jetzt. Was auch immer das bedeutet, tu es einfach." Entfernt alle anderen angehängten Sitzungen und entfernt sie aus der Ferne und hängt sie an die erste Sitzung an, die sie ausführen kann. Grundsätzlich, tut was immer es tun muss, um eine bestehende Sitzung anzuhängen, und erstellt eine neue, wenn es nichts gibt.

Der allererste (-x -R) ist am wenigsten wahrscheinlich, um Probleme zu verursachen (wird Ihre andere Verbindung nicht trennen), sondern einfach nur an etwas anhängen, wenn es etwas zu anhängen gibt und etwas schafft, wenn nichts zu befestigen ist.


11
2017-07-09 17:01



Dies sind alles nette / handliche Optionen, aber keine von ihnen beantwortet die ursprüngliche Frage, die es war, sich (wieder) mit einer Sitzung zu verbinden namentlich. - Daniel


ich benutze

screen -dRRS sessname

Ich möchte nicht mein gesamtes Login auf die andere Shell fallen lassen, wie -D tut, und ich möchte definitiv nicht den Multi-Attach-Modus von -x.


4
2017-07-09 17:12