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

151

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 eu entrei novamente e quero retomar a sessão.

É 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 anexado 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 me 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.
Richard
fonte

Respostas:

242

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

Enquanto isso, use a -dopção para desconectar a sessão da tela do terminal em que está.

screen -r -d 30608

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

Gilles
fonte
15
Para anexar a uma sessão de tela existente, é screen -x, screen -rdé anexar a ela depois de removê-la de todos os terminais aos quais foi conectada. No caso do OP, eu concordo que o último é provavelmente preferido, mas no caso geral, não necessariamente. Eu geralmente uso -xRpara anexar ou criar se não houver nada para anexar.
Stéphane Chazelas
10

De acordo com o manual, você pode "retomar" apenas as telas destacadas :

' [match] ' ' [match] ' Não inicie a tela, mas imprima uma lista de sequências de identificação da sessão (geralmente no formato pid.tty.host; consulte Nome da sessão). As sessões marcadas como 'desanexadas' podem ser retomadas com . Os marcados como 'anexados' estão em execução e têm um terminal de controle. Se a sessão for executada no modo multiusuário, ela será marcada como 'multi'. As sessões marcadas como 'inacessíveis' vivem em um host diferente ou estão mortas. Uma sessão inacessível é considerada inoperante, quando seu nome corresponde ao nome do host local ou ao parâmetro especificado, se houver. Veja o-ls
-list
screen -r-rsinalizador para obter 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 você não tiver certeza. Remova as sessões com a -wipeopção ' '.

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

' -x'
Anexe a uma sessão que já esteja anexada em outro local (modo de exibição múltipla). Tela se recusa a anexar a partir de si mesma. Mas, quando em cascata várias telas, loops não são detectados; cuidar.

Thomas Dickey
fonte
4
Com -xuma sessão ainda será anexado 'em algum lugar'. Para assumir completamente a sessão, deve-se usar -d | -D (opções de desanexação) junto com -r | -R (opções de recolocação).
Andrew Kozlov
1
Essa é uma alternativa, mas pode não ser o que o OP precisa. Eu costumo anexar de vários locais.
Thomas Dickey
4

Anexar a tela com opções -rD

Do manual:

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