Uma consulta que pode levar horas para ser executada continua executando no servidor remoto se eu fechar a conexão depois de executar o comando?

4

Se eu me conectar a um servidor de banco de dados remoto via ssh, inicio o cliente mysql e executo uma consulta que pode levar algumas horas para ser executada, feche a conexão, a consulta continuará a ser executada até que seja concluída? Eu posso mysqldump desta forma em um banco de dados enorme, voltar alguns dias depois e esperar que tudo esteja completo?

obrigado!

    
por silipulse 16.09.2014 / 05:36

2 respostas

4

Simplificando: não - a menos que você tome medidas especiais, qualquer comando de longa duração no servidor terminará quando o shell que o ssh iniciou remotamente sair. Esse shell será encerrado se você terminar sua sessão ssh , ou mesmo se a conexão TCP for interrompida (perder conectividade de rede, alternar redes Wi-Fi, hibernar, etc).

No entanto, existem várias opções para realizar essas "medidas especiais". Do mais simples ao mais complexo / envolvido:

  • nohup - basta prefixar seu comando de uma linha com nohup . Isso funciona se você puder assumir que o comando será executado e, em seguida, encerrará a si mesmo. A saída será enviada para o arquivo nohup.out em seu diretório atual. Exemplo:

    nohup sh -c "sleep 5; echo done" &
    
  • tela - screen configurará uma janela de terminal virtual que não será encerrada quando sua conexão ssh terminar. Você pode se reconectar ao servidor mais tarde e ver o status de todos os comandos que estava executando e emitir novos comandos. Exemplo:

    % client: ssh server
    # server: screen
    # server[0]: mysql -e 'really long query'
    <disconnect>
    

    Mais tarde, voltar e:

    % client: ssh server
    # server: screen -RD  # -RD says "reconnect to my previous screen, even it already attached"
    # server[0]: <right where you left off in the previous screen>
    

    Existem muitas opções para screen , você pode criar vários "terminais" dentro de uma sessão screen , e você pode configurá-lo extensivamente no arquivo ~/.screenrc .

  • mosh - um substituto para ssh , que manterá a sessão independentemente da rede conectividade. À medida que você migra entre redes Wi-Fi ou até mesmo hiberna / desperta sua máquina, mosh se reconectará ao servidor. Além disso, ele fornecerá uma interface livre de atrasos para trabalhar, de modo que, à medida que você digita seus comandos, você não será afetado pela lentidão do link ou do servidor. Observe que o mosh usa ssh para estabelecer a conexão inicial e configurar o servidor UDP no terminal remoto.

por 16.09.2014 / 22:41
0

O fechamento da conexão SSH encerrará todos os processos iniciados dentro dessa sessão.

Dê uma olhada no comando screen , que permite iniciar uma sessão dentro de um shell e reconectá-lo posteriormente a partir de outro shell local ou remoto.

    
por 16.09.2014 / 06:26