Dołącz ponownie lub utwórz nazwaną sesję ekranową? (lub trwałe sesje ekranowe)

27

Zasadniczo mam zdalną sesję ekranu, do której chcę automatycznie ponownie dołączyć. Obecnie wykonuję to za pomocą następującego polecenia (jako zakładki iTerm lub aliasu)

ssh host -t screen -x thesessionname

Działa to dobrze, ale jeśli sesja umrze z jakiegokolwiek powodu, chciałbym ją odtworzyć przy następnym połączeniu. -RFlaga dla screenjest prawie idealne:

ssh host -t screen -R -S thesessionname

.. ale jeśli sesja jest już dołączona, tworzona jest druga sesja (tak jak -Rw przypadku pierwszej odłączonej sesji, jeśli nie zostanie znaleziona, tworzy nową)

Czy istnieje sposób, aby -Rflaga szukała również dołączonych sesji i tworzyła nową, jeśli thesessionnamenie istnieje?

Jeśli nie jest to łatwo wykonalne, jak mogę automatycznie odtworzyć sesję ekranu po jej śmierci? Być może skrypt uruchamiany przez crona, który szuka nazwanej sesji, tworząc ją, gdyby nie istniała?

dbr
źródło

Odpowiedzi:

32

Powiedz screenowi, aby był bardziej wytrwały w próbach:

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

Więc połącz oba i powinieneś mieć swoje rozwiązanie („-DR” jest równoważne z „-D -R”):

screen -DR <yoursession> 

Dodatkowo warto wiedzieć, że możesz przeglądać uruchomione sesje za pomocą:

screen -ls
Dan Carley
źródło
5
Idealnie, screen -x -R -S mainwłaśnie tego użyłem (działa tak samo bez wymuszonego odłączenia), dzięki!
dbr
Czasami chcesz użyć sceen -r <yoursession>, wyświetli błąd, gdy jest już dołączony (zamiast tworzenia nowej sesji).
niebezpieczne89
11

Kilka dobrych opcji. Po pierwsze, mój ulubiony:

screen -x -R

Spowoduje to dołączenie do pierwszej dostępnej sesji ekranowej (udostępnianie, jeśli podłączone jest inne połączenie), a jeśli w ogóle nie ma sesji ekranowych, rozpocznij nową.

screen -d -RR

Dokumenty tego typu mówią „Dołącz ponownie sesję i jeśli to konieczne, odłącz ją lub utwórz. Użyj pierwszej sesji, jeśli dostępna jest więcej niż jedna sesja”. Zasadniczo double-R sprawia, że ​​szuka pierwszej sesji, z którą można się połączyć.

screen -D -RR

„Dołącz tu i teraz. Cokolwiek to znaczy, po prostu to zrób.” Odłączy i zdalnie wyloguje się z innych dołączonych sesji i dołączy do pierwszej sesji, jaką może. Zasadniczo robi wszystko, co trzeba, aby dołączyć do istniejącej sesji i tworzy nową, jeśli nic tam nie ma.

Pierwszy (-x -R) powoduje najmniej problemów (nie odłączy twojego drugiego połączenia), ale po prostu zawsze dołącza do czegoś, jeśli jest coś do czego się przyczepi i tworzy coś, jeśli nie ma się do czego przyczepić.

freiheit
źródło
1
Są to wszystkie przydatne / przydatne opcje, ale żadna z nich nie odpowiada na pierwotne pytanie, którym było (ponowne) połączenie się z sesją według nazwy .
Daniel
5

używam

screen -dRRS sessname

Nie chcę, aby moje całe logowanie na drugiej powłoce zostało usunięte, podobnie jak -Drobi, i zdecydowanie nie chcę trybu wielokrotnego dołączania -x.

chaos
źródło