Estoy trabajando en un servidor remoto Debian Jessie. Comencé una sesión de pantalla, comencé a ejecutar un script y luego me desconecté porque se agotó el tiempo de espera de la red.
Ahora he iniciado sesión nuevamente y quiero reanudar la sesión.
Esto es lo que veo cuando enumero las pantallas:
$ screen -ls
There are screens on:
30608.pts-8.myserver (11/03/2015 08:47:58 AM) (Attached)
21168.pts-0.myserver (11/03/2015 05:29:24 AM) (Attached)
7006.pts-4.myserver (10/23/2015 09:05:45 AM) (Detached)
18228.pts-4.myserver (10/21/2015 07:50:49 AM) (Detached)
17849.pts-0.myserver (10/21/2015 07:43:53 AM) (Detached)
5 Sockets in /var/run/screen/S-me.
Parece que estoy conectado a dos pantallas a la vez.
Ahora quiero reanudar la sesión que estaba ejecutando antes para ver los resultados de mi script:
$ screen -r 30608.pts-8.myserver
There is a screen on:
30608.pts-8.OpenPrescribing (11/03/2015 08:47:58 AM) (Attached)
There is no screen to be resumed matching 30608.pts-8.myserver.
¿Por qué no puedo volver a conectar?
Tengo el mismo problema con la otra pantalla:
$ screen -r 21168.pts-0.myserver
There is a screen on:
21168.pts-0.OpenPrescribing (11/03/2015 05:29:24 AM) (Attached)
There is no screen to be resumed matching 21168.pts-0.myserver.
Respuesta1
La sesión todavía está adjunta en otro terminal. El servidor no ha detectado la interrupción de la red en esa conexión: solo detecta la interrupción cuando intenta enviar un paquete y obtiene un error o no recibe respuesta después de un tiempo de espera, pero esto aún no ha sucedido. Estás en una situación común en la que el cliente detectó la interrupción porque intentó enviar alguna entrada y falló, pero el servidor simplemente está ahí esperando la entrada. Finalmente, el servidor enviará un paquete keepalive y detectará que la conexión está inactiva.
Mientras tanto, utiliza la -d
opción para desconectar la sesión de pantalla del terminal donde se encuentra.
screen -r -d 30608
screen -rd
es prácticamente la forma estándar de adjuntar a una sesión de pantalla existente.
Respuesta2
De acuerdo con lamanualsólo puedes "reanudar"separadopantallas:
'
-ls
[fósforo]'
'-list
[fósforo]'
No inicia la pantalla, sino que imprime una lista de cadenas de identificación de sesión (normalmente con el formato pid.tty.host; consulte Nombre de sesión).Las sesiones marcadas como "separadas" se pueden reanudar conscreen -r
. Los marcados como "adjuntos" están en funcionamiento y tienen un terminal de control. Si la sesión se ejecuta en modo multiusuario, se marca como "multi". Las sesiones marcadas como "inalcanzables" viven en un host diferente o están inactivas. Una sesión inalcanzable se considera inactiva cuando su nombre coincide con el nombre del host local o con el parámetro especificado, si corresponde. Consulte la-r
bandera para obtener una descripción de cómo construir coincidencias. Las sesiones marcadas como "muertas" deben revisarse y eliminarse minuciosamente. Pregúntele a su administrador del sistema si no está seguro. Eliminar sesiones con la-wipe
opción ''.
Lo que quieres es esta opción:
'
-x
'
Adjuntar a una sesión que ya está adjunta en otro lugar (modo de visualización múltiple). La pantalla se niega a conectarse desde dentro de sí misma. Pero cuando se conectan en cascada varias pantallas, no se detectan bucles; cuidarse.
Respuesta3
Adjunto screen
con las opciones -rD
.
Ver el manual:
-D -r
Reattach a session. If necessary detach and logout remotely first.
Respuesta4
Hay dos formas que conozco:
- pantalla -rd <nombre_pantalla/id>
Esto separará la pantalla y la volverá a conectar. Cerrará la pantalla para cualquier usuario previamente conectado.
- pantalla -x <nombre_pantalla/id>
Esto lo conectará directamente a la pantalla sin finalizar a los usuarios conectados. Esto se utiliza principalmente para pantallas multiusuario.