Como recuperar um shell após uma desconexão

32

Estou fazendo algum trabalho em uma máquina remota do CentOS 5.6 e minha rede continua caindo. Existe uma maneira de recuperar minhas sessões suspensas depois que eu me reconecto?

EDIT: estou fazendo algumas atualizações e instalando com o yum e estou preocupado que isso possa ser um problema se os processos ficarem pendurados no meio do que eles estão fazendo.

    
por Jeff Schaller 23.08.2011 / 11:35

6 respostas

57

Não tem jeito, mas para evitar isso eu gosto de usar tmux . Eu inicio o tmux, inicio a operação e continuo meu caminho. Se eu retornar e descobrir que a conexão foi interrompida, tudo o que tenho a fazer é reconectar e digitar tmux attach .

Aqui está um exemplo.

$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0
Back in the tmux sesion
    
por 23.08.2011 / 11:39
34

As recomendações para o tmux e a tela são boas sugestões. Eles implicam a resposta para a sua pergunta, mas na verdade não afirmam isso. A resposta para a pergunta é: não há como. Se você logar via ssh, o shell é finalizado quando a conexão cai. A solução é entrar e iniciar imediatamente um terminal virtual de algum tipo (como tmux ). Quando a conexão cai, o shell em que você está é encerrado, mas você pode abrir um novo shell e se reconectar ao terminal virtual (que está executando o shell no qual você está realmente realizando seu trabalho).

    
por 23.08.2011 / 11:44
8

Como William disse, a resposta curta é não, não tem jeito. Para evitar isso, você pode usar o comando de tela antes de perder a conexão

    
por 23.08.2011 / 11:38
3

Não, você não pode recuperar um shell após uma desconexão. Em vez disso, o que você pode fazer é garantir que o comando que você estava executando continue a ser executado após a desconexão.

Para conseguir isso, use os comandos "nohup" e "disown", que geralmente são comandos embutidos na maioria dos shells, ou seja, você não precisa instalar nada. Isso só funciona para comandos não interativos.

Então, os passos seriam os seguintes:

  1. Login no servidor
  2. Execute seu comando: "nohup sudo yum update &" (isso também registrará todas as saídas no arquivo nohup.out em seu diretório atual)
  3. Executar "rejeitar% 1"
  4. Sinta-se à vontade para desconectar neste momento ou aguarde para ser desconectado:)

Quando você voltar ao servidor, simplesmente "tail nohup.out" para ver como o comando está funcionando.

    
por 17.09.2013 / 13:29
2

Alguém adicionou reptyr em um comentário em vez de uma resposta, então não posso contestá-lo, mas parece ser uma boa resposta para a pergunta editada e funcionou muito bem com o CentOS.

veja: link link

Is there a way that I can recover my hung sessions after I reconnect?

EDIT: am doing some updating and installing with yum and am worried this might be a problem if processes keep hanging in the middle of whatever they're doing.

Da mesma forma, perdi conexão remota com uma sessão de atualização do yum. Então eu procurei e encontrei essa pergunta ... então reconectar e usar a tela desta vez:

  1. reconectar ssh
  2. tela
  3. instala o reptyr conforme os links acima
  4. ps -a | grep yum
  5. reptyr psid

e lá estou no prompt recuperado que yum estava dando algumas horas antes.

Tecnicamente, as respostas estão todas corretas, isso não é uma recuperação de uma sessão interrompida, é uma reparação de um processo órfão para a sessão atual. E muito útil é também ...

    
por 14.04.2017 / 02:48
1

Como muitas pessoas sugeriram screen e tmux , ambas suportam funcionalidades básicas, mas têm características específicas distintas, portanto, não se pode dizer que uma seja superior a outra em todos os casos. Por exemplo, somente o tmux suporta Divisão de janelas , enquanto apenas a tela GNU pode alternar quebra de linha longa com (Ctrl + a r). Veja uma comparação mais detalhada aqui .

Também existem ferramentas especificamente para corrigir este problema do ssh:

Autossh é um programa para iniciar uma cópia do ssh e monitorá-lo, reiniciando-o conforme necessário, caso ele morra ou pare de passar o tráfego. A ideia é do rstunnel.

Mosh é um aplicativo de terminal remoto que permite roaming, suporta conectividade intermitente e fornece edição inteligente de eco e linha local de pressionamentos de tecla do usuário. Mosh é um substituto do SSH. É mais robusto e responsivo, especialmente em conexões Wi-Fi, celulares e de longa distância.

    
por 16.04.2015 / 13:45