Rattacher ou créer une session d'écran nommée? (ou sessions d'écran persistantes)

27

Fondamentalement, j'ai une session d'écran à distance, à laquelle je souhaite me reconnecter automatiquement. Actuellement, je le fais avec la commande suivante (comme un signet iTerm ou un alias)

ssh host -t screen -x thesessionname

Cela fonctionne bien, mais si la session se termine pour une raison quelconque, j'aimerais qu'elle soit recréée lors de ma prochaine connexion. Le -Rdrapeau pour screenest presque parfait:

ssh host -t screen -R -S thesessionname

..mais si la session est déjà attachée, une deuxième session est faite (comme -Rsimple recherche la première session détachée, si aucune n'est trouvée, elle en crée une nouvelle)

Existe-t-il un moyen de faire en sorte que l' -Rindicateur recherche les sessions jointes et d'en créer une nouvelle uniquement s'il thesessionnamen'existe pas?

Si cela n'est pas facilement réalisable, comment pourrais-je recréer automatiquement la session d'écran lorsqu'elle s'éteint? Peut-être un script exécuté via cron qui recherche la session nommée, la créant si elle n'existe pas?

dbr
la source

Réponses:

32

Dites à l'écran d'être un peu plus persistant à essayer:

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

Alors combinez les deux et vous devriez avoir votre solution ("-DR" est équivalent à "-D -R"):

screen -DR <yoursession> 

De plus et utile de savoir, vous pouvez afficher les sessions en cours avec:

screen -ls
Dan Carley
la source
5
Parfait, screen -x -R -S mainc'est ce que j'ai fini par utiliser (fonctionne de la même manière sans le détachement forcé), merci!
dbr
Parfois, vous voulez utiliser sceen -r <yoursession>, donnera une erreur quand il est déjà attaché (au lieu de créer une nouvelle session).
danger89
11

Quelques bonnes options. Tout d'abord, mon préféré:

screen -x -R

Cela se rattachera à la première session d'écran disponible (partage si une autre connexion est connectée), et s'il n'y a aucune session d'écran, commencez-en une nouvelle.

screen -d -RR

Les documents pour cela indiquent "Rattacher une session et si nécessaire la détacher ou la créer. Utilisez la première session si plusieurs sessions sont disponibles." Fondamentalement, le double-R permet de rechercher la première session à attacher.

screen -D -RR

"Attachez ici et maintenant. Quoi que cela signifie, faites-le." Détachera et déconnectera à distance toutes les autres sessions attachées et s'attachera à la première session possible. Fondamentalement, fait tout ce qu'il doit faire pour s'attacher à une session existante et en crée une nouvelle s'il n'y a rien.

Le tout premier (-x -R) est le moins susceptible de causer des problèmes (ne détachera pas votre autre connexion), mais se joint toujours à quelque chose s'il y a quelque chose à attacher et crée quelque chose s'il n'y a rien à attacher.

freiheit
la source
1
Ce sont toutes des options agréables / pratiques, mais aucune d'entre elles ne répond à la question d'origine, qui était de (re) se connecter à une session par son nom .
Daniel
5

j'utilise

screen -dRRS sessname

Je ne veux pas que ma connexion complète sur l'autre shell soit supprimée, comme le -Dfait, et je ne veux certainement pas le mode multi-attach -x.

le chaos
la source