Não consigo retomar a tela, diz que já estou conectado?

Não consigo retomar a tela, diz que já estou conectado?

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

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

Isto é o que vejo quando listo as telas:

$ 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 estou preso a duas telas ao mesmo tempo.

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 consigo reconectar?

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.

Responder1

A sessão ainda está anexada em outro terminal. O servidor não detectou a interrupção da rede nessa conexão: ele só detecta a interrupção quando tenta enviar um pacote e recebe um erro 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á parado esperando pela entrada. Eventualmente, o servidor enviará um pacote de manutenção de atividade e detectará que a conexão está inoperante.

Enquanto isso, use a -dopção de desanexar a sessão de tela do terminal onde ela está.

screen -r -d 30608

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

Responder2

De acordo commanualvocê pode "retomar" apenasseparadotelas:

'-ls [corresponder]'
'-list [corresponder]'
Não inicia a tela, mas em vez disso imprime uma lista de strings de identificação de sessão (geralmente no formato pid.tty.host; consulte Nome da Sessão).As sessões marcadas como 'desanexadas' podem ser retomadas comscreen -r. Aqueles marcados como 'anexados' estão em execução e possuem um terminal de controle. Se a sessão for executada em modo multiusuário, ela será marcada como 'multi'. As sessões marcadas como 'inacessíveis' estão em um host diferente ou estão mortas. Uma sessão inacessível é considerada morta quando seu nome corresponde ao nome do host local ou ao parâmetro especificado, se houver. Veja a -rbandeira para uma descrição de como construir correspondências. As sessões marcadas como 'mortas' devem ser cuidadosamente verificadas e removidas. Pergunte ao administrador do sistema se não tiver certeza. Remova sessões com a -wipeopção ''.

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

'-x'
Anexar a uma sessão que já está anexada em outro lugar (modo multi-display). A tela se recusa a ser anexada de dentro de si. Mas ao colocar várias telas em cascata, os loops não são detectados; tomar cuidado.

Responder3

Eu anexo screencom as opções -rD.

Veja o manual:

-D -r
Reattach a session. If necessary detach and logout remotely first. 

Responder4

Existem duas maneiras que eu conheço:

  1. tela -rd <nome_tela/id>

Isso irá desconectar a tela e recolocá-lo. Isso fechará a tela para todos os usuários pré-conectados.

  1. tela -x <nome_tela/id>

Isso irá anexá-lo diretamente à tela sem encerrar os usuários anexados. Isso é usado principalmente para monitores multiusuário.

informação relacionada