Tubo quebrado SSH mata processo em primeiro plano

Tubo quebrado SSH mata processo em primeiro plano

Eu tenho 2 hosts que posso conectá-los através de SSH. Em um host, depois de um tempo, recebo o erro. Write Failed: broken pipe.No outro host, não recebo esse erro.

Não entendo por que em um host recebo esse problema e em outro host está tudo bem.

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

Eu gostaria que o processo em primeiro plano não fosse interrompido quando a conexão SSH fosse interrompida. Então, só tenho 2 soluções:

  1. saber como evitar tubos quebrados de SSH ou
  2. saiba como evitar que o processo morra quando a conexão SSH cair.

Alguém pode me ajudar nisso?

Responder1

Não sei o que acontece com sua conexão SSH, mas provavelmente um link de rede ruim? Você pode tentar usarMOSH, que é mais robusto que uma conexão SSH normal. Especialmente se a rede for o problema.

Se você não consegue consertar a conexão, você pode tentar usar nohupna frente do seu comando ou apenas nohup tmuxe ver se isso muda alguma coisa.

nohup - executa um comando imune a interrupções, com saída para um não-tty

SINOPSE
nohup COMANDO [ARG]...
nohup OPÇÃO

Responder2

Eu me deparei com esse problema apenas algumas vezes. Para mim, o que causaria o rompimento do cano seria a falta de uma rota. Ocorreu apenas ao conectar-se de uma máquina física na rede principal a uma VM em uma rede diferente atrás de um Nat.

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

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

Responder3

A causa mais comum de desconexões de ssh para mim é a falta de manutenção. É configurável no cliente ssh. Com ssh, seria "-oTCPKeepAlives=yes"

no que diz respeito aos programas em execução após o fechamento do ssh, quando você executa um programa no shell, ele é um processo filho da instância do shell. Depois de fechar, as crianças também 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 depois que a conexão ssh é desconectada.

informação relacionada