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 -d
opçã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-r
bandeira 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-wipe
opçã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 screen
com 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:
- tela -rd <nome_tela/id>
Isso irá desconectar a tela e recolocá-lo. Isso fechará a tela para todos os usuários pré-conectados.
- tela -x <nome_tela/id>
Isso irá anexá-lo diretamente à tela sem encerrar os usuários anexados. Isso é usado principalmente para monitores multiusuário.