Não é possível retomar a tela, diz que eu já estou ligado?

112

Eu estou trabalhando em um servidor Debian Jessie remoto. Eu iniciei uma sessão de tela, comecei a executar um script e fui desconectado por um tempo limite de rede.

Agora eu fiz o login novamente e quero retomar a sessão.

Isto é o que vejo quando listo ecrãs:

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

Eu pareço estar ligado a duas telas de uma só vez.

Agora quero retomar a sessão que estava executando antes para ver os resultados do meu 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 que não posso anexar novamente?

Eu tenho o mesmo problema com a outra tela:

$ 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.
    
por Richard 03.11.2015 / 10:15

3 respostas

172

A sessão ainda está anexada em outro terminal. O servidor não detectou a interrupção da rede nessa conexão: ele detecta apenas a indisponibilidade quando tenta enviar um pacote e recebe um erro de volta ou nenhuma resposta após um tempo limite, mas isso ainda não aconteceu. Você está em uma situação comum em que o cliente detectou a interrupção porque tentou enviar alguma entrada e falhou, mas o servidor está apenas aguardando a entrada. Eventualmente, o servidor enviará um pacote keepalive e detectará que a conexão está inativa.

Enquanto isso, use a opção -d para desanexar a sessão de tela do terminal em que ela está.

screen -r -d 30608

screen -rd é praticamente o modo padrão de anexar a uma sessão de tela existente.

    
por 04.11.2015 / 01:15
8

De acordo com o manual , é possível "resumir" apenas telas desanexadas:

-ls [match]
-list [match]
Do not start screen, but instead print a list of session identification strings (usually of the form pid.tty.host; see Session Name). Sessions marked ‘detached’ can be resumed with screen -r. Those marked ‘attached’ are running and have a controlling terminal. If the session runs in multiuser mode, it is marked ‘multi’. Sessions marked as ‘unreachable’ either live on a different host or are dead. An unreachable session is considered dead, when its name matches either the name of the local host, or the specified parameter, if any. See the -r flag for a description how to construct matches. Sessions marked as ‘dead’ should be thoroughly checked and removed. Ask your system administrator if you are not sure. Remove sessions with the ‘-wipe’ option.

O que você quer é essa opção:

-x
Attach to a session which is already attached elsewhere (multi-display mode). Screen refuses to attach from within itself. But when cascading multiple screens, loops are not detected; take care.

    
por 03.11.2015 / 10:30
3

Eu adido a tela com opções -rD

Do manual:

-D -r
Reattach a session. If necessary detach and logout remotely first. 
    
por 07.05.2016 / 22:17

Tags