¿Volver a conectar o crear una sesión de pantalla con nombre? (o sesiones de pantalla persistentes)

27

Básicamente, tengo una sesión de pantalla remota, a la que deseo volver a conectar automáticamente. Actualmente lo estoy haciendo con el siguiente comando (como un marcador iTerm o un alias)

ssh host -t screen -x thesessionname

Esto funciona bien, pero si la sesión muere por cualquier razón, me gustaría que se vuelva a crear la próxima vez que me conecte. La -Rbandera para screenes casi perfecta:

ssh host -t screen -R -S thesessionname

... pero si la sesión ya está adjunta, se realiza una segunda sesión (como se -Rve en la primera sesión separada, si no se encuentra ninguna, se crea una nueva)

¿Hay alguna manera de hacer que la -Rbandera busque sesiones adjuntas también y solo cree una nueva si thesessionnameno existe?

Si esto no es fácil de hacer, ¿cómo podría recrear automáticamente la sesión de pantalla cuando muera? ¿Quizás un script ejecutado a través de cron que busca la sesión nombrada, creándola si no existiera?

dbr
fuente

Respuestas:

32

Dígale a la pantalla que sea un poco más persistente al intentar:

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

Así que combine los dos y debería tener su solución ("-DR" es equivalente a "-D -R"):

screen -DR <yoursession> 

Además y útil para saber, puede ver sesiones en ejecución con:

screen -ls
Dan Carley
fuente
55
Perfecto, screen -x -R -S maines lo que terminé usando (funciona igual sin la separación forzada), ¡gracias!
dbr
A veces desea utilizar sceen -r <yoursession>, dará un error cuando ya está adjunto (en lugar de crear una nueva sesión).
peligro89
11

Algunas buenas opciones. Primero, mi favorito:

screen -x -R

Eso se adjuntará a la primera sesión de pantalla disponible (compartir si hay otra conexión conectada), y si no hay sesiones de pantalla, inicie una nueva.

screen -d -RR

Los documentos para eso dicen "Vuelva a adjuntar una sesión y, si es necesario, sepárela o créela. Utilice la primera sesión si hay más de una sesión disponible". Básicamente, la doble R hace que busque la primera sesión para adjuntar.

screen -D -RR

"Adjuntar aquí y ahora. Lo que sea que eso signifique, simplemente hazlo". Separará y cerrará sesión remotamente en cualquier otra sesión adjunta y se adjuntará a la primera sesión que pueda. Básicamente, hace lo que sea necesario para adjuntar a una sesión existente y crea una nueva si no hay nada allí.

La primera (-x -R) es la que tiene menos probabilidades de causar problemas (no desconectará su otra conexión), pero simplemente siempre se conecta a algo si hay algo a lo que apegarse y crea algo si no hay nada a lo que apegarse.

freiheit
fuente
1
Todas estas son opciones agradables / prácticas, pero ninguna de ellas responde a la pregunta original, que era (re) conectarse a una sesión por su nombre .
Daniel
5

yo suelo

screen -dRRS sessname

No quiero que se elimine mi inicio de sesión completo en el otro shell, como lo -Dhace, y definitivamente no quiero el modo de conexión múltiple de -x.

caos
fuente