Tubo quebrado SSH mata processo de primeiro plano

1

Eu tenho dois hosts que posso conectá-los por meio do SSH. Em um host, depois de um tempo, recebo o erro Write Failed: broken pipe. No outro host, não recebo esse erro.

Eu não entendo porque em um host, eu recebo este problema, e em outro host está tudo bem.

Então, eu configurei uma conexão SSH com o tmux, e dentro do host remoto eu executei um processo em primeiro plano (celeryd). Mas, mesmo quando a sessão SSH falha e reconecto à sessão perdida, o processo em primeiro plano morreu.

Eu gostaria que o processo de primeiro plano não caísse quando a conexão SSH fosse interrompida. Então, eu só tenho 2 soluções:

  1. sabe como evitar canais quebrados do SSH ou
  2. sabe como evitar que o processo morra quando a conexão SSH cair.

Alguém pode me ajudar nisso?

    
por xeon123 20.04.2015 / 18:48

3 respostas

2

Eu não sei o que acontece com sua conexão SSH, mas provavelmente um link de rede ruim? Você pode tentar usar o MOSH , que é mais robusto do que uma conexão SSH regular. Especialmente se a rede é o problema.

Se não conseguir consertar a conexão, você pode tentar usar nohup na frente do seu comando ou apenas nohup tmux e ver se isso muda alguma coisa.

nohup - run a command immune to hangups, with output to a non-tty

SYNOPSIS
nohup COMMAND [ARG]...
nohup OPTION

    
por 20.04.2015 / 19:00
2

Já me deparei com este problema apenas algumas vezes. Para mim, o que faria com que o cano quebrado fosse uma rota perdida. Ocorreu apenas ao conectar de uma máquina física na rede principal a uma VM em uma rede diferente atrás de um Nat.

Eu verificaria problemas de rede para ver se você pode impedir a ocorrência de canais quebrados.

Se você não encontrar uma causa para o problema, poderá usar algo como screen ou tmux para manter um terminal aberto mesmo se estiver desconectado. Então você pode se reconectar e se conectar à tela ou à sessão do tmux e seu processo ainda estará em execução e ativo.

    
por 20.04.2015 / 18:58
1

A causa mais comum de desconexões de ssh para mim tem sido sem keep-alives. É configurável no cliente ssh. Com ssh, seria "-oTCPKeepAlives = yes"

no que diz respeito a programas em execução após o fechamento do ssh, quando você executa um programa no shell, é um processo filho da instância do shell. Assim que fecha, as crianças também se fecham. Você pode tentar executar seu programa com um & no final, o que geraria um processo diferente. Acabei de fazer um teste rápido e o processo parece continuar após a conexão do ssh ser desconectada.

    
por 20.04.2015 / 20:05