Tela GNU: não pode retomar a tela de uma sessão remota quebrada

1

Às vezes, o shell SSH apresentando active screen session no meu servidor remoto fica quebrado (linha de internet não muito estável, por exemplo ) com a sessão ainda anexada.

Em seguida, eu SSH novamente no servidor e tente retomar a screen session:

luis@Zarzamoro:~$ screen -r
There is a screen on:
        9166.pts-2.Zarzamoro    (12/23/15 23:47:34)     (Attached)
There is no screen to be resumed.
luis@Zarzamoro:~$ screen -r 9166.pts-2.Zarzamoro
There is a screen on:
        9166.pts-2.Zarzamoro    (12/23/15 23:47:34)     (Attached)
There is no screen to be resumed matching 9166.pts-2.Zarzamoro.

Eu não sei muito sobre a tela GNU. Por que isso acontece?
É possível retomar esta scree n sessão?

    
por Sopalajo de Arrierez 23.12.2015 / 23:56

4 respostas

3

Dois pontos:

  • Você não precisa especificar todo o pid + nome da sessão ( tela aceita uma abreviação razoável).

  • Você pode obter melhores resultados com a opção -x .

Na página de manual :

-r
sessionowner/[pid.sessionname]’ Resume a detached screen session.

-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 24.12.2015 / 00:03
3

Uso:

screen -r -d <pid>.<tty>.<host>

No seu caso:

screen -r -d 9166.pts-2.Zarzamoro

Isso forçará a desanexar a tela na outra extremidade e anexá-la.

    
por 24.12.2015 / 00:36
1

Isso acontece comigo ocasionalmente também. O que eu acredito que acontece é que o seu tty não está devidamente desconectado da tela e, portanto, quando você se reconectar ao servidor, ainda estará "conectado" à tela.

Veja o que eu faço:

screen -d
screen -r (if you have only one screen)
screen -r <pid> (if you have more than one screen)

Você também pode fazer

screen -r -d (add <pid> if you have more than one screen)

para desanexar e recolocar a tela anexada incorretamente.

Além disso, ao fazer screen -r você não precisa especificar o nome da tela inteira, apenas o pid (número de quatro dígitos).

    
por 24.12.2015 / 09:08
0

Você pode até automatizar isso, conforme mostrado na aqui , onde ele se reconectará automaticamente à sessão de tela existente (ou criará uma nova sessão de tela, se nenhuma existir):

.bashrc

Add these lines at the top of ~/.bashrc on the target host:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ]
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  [ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs
  sleep 1
  screen -RR && exit 0
  # normally, execution of this rc script ends here...
  echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]
    
por 24.12.2015 / 00:58

Tags