Suspensão do comando SSH de longa duração - melhor estratégia?

2

Eu tenho um comando de longa execução sendo executado por SSH. De vez em quando, o comando parece travar e parar de obter qualquer saída. O comando ainda está sendo executado na outra máquina (na verdade, se eu Ctrl + C sair do comando SSH, ele ainda é executado, o que é bom), meu cliente simplesmente trava.

Meu comando está executando uma meta ant , como esta:

ssh -tt user@machine 'cd /thedir; export DISPLAY=:80; ant clean test'

O comando ant pode levar até uma hora.

Eu imagino que essa é uma estratégia ruim, já que qualquer falha na rede pode ocorrer e atrapalhar minha conexão. Alguém pode sugerir uma abordagem alternativa? Meu objetivo seria:

  1. Meu cliente espera que o comando termine
  2. ainda recebo saída do comando
  3. Se ocorrerem blips de rede, ainda posso verificar e esperar que o comentário termine

Qualquer ajuda ou sugestão são muito apreciadas.

EDIT: Estou executando um script bash completo ... Eu não preciso de um one-liner ou qualquer coisa assim.

    
por Sean Adkinson 02.10.2013 / 20:36

2 respostas

2

Você pode tentar executar o comando em segundo plano (desconectado da sessão do usuário) e enviar o resultado por e-mail. Mais ou menos assim:

ssh -tt user@machine 'cd /thedir; nohup ant clean test 2>&1 | mail -s "The cleanup was completed." [email protected]'

Ainda não testei isso.

    
por 02.10.2013 / 20:47
1

Minha recomendação é usar uma combinação de AutoSSH e tela. O autossh reconectará automaticamente o SSH se a sessão for desconectada, e a tela permitirá que seu programa seja executado independentemente da sessão ssh, para que você possa se reconectar a ele no processo.

Dessa forma, quando a rede soltar, o autossh será reconectado e a tela será reconectada ao shell de scripts.

localhost>$ autossh -t remotehost 'screen -Rd'
remotehost>$ scriptname

Dessa forma, quando o ssh morrer, o autossh se reconectará e reconectará automaticamente a sessão de tela.

link

    
por 02.10.2013 / 21:49