Execute o script remoto e monitore sua atividade sem manter a conexão

2

Eu trabalho no Linux Mint eu mesmo, tenho servidor Ubuntu VPS remoto com acesso root ssh. Eu tenho um script no servidor que faz um processamento de dados longo (horas ou dias de processamento).

Agora posso abrir o console na minha máquina, conectar-me ao VPS via script ssh e executar - vejo o script em tempo real no meu console (quantos dados processados, quanto resta e assim por diante são atualizados regularmente no meu console tela) - isso funciona.

Como posso fazer semelhante, mas sem dependências da minha máquina local :

  1. Conecte-se ao servidor & executar script
  2. Desconecte e deixe o servidor para fazer seu longo trabalho de processamento, enquanto eu posso reinicializar minha máquina local ou desligá-la sem afetar a execução do script do servidor iniciado.
  3. Possibilidade de se conectar mais tarde novamente e ver o que é atual status do processo (os mesmos dados que ele me mostrou em tempo real) sem processo de interrupção.
por DaneSoul 23.01.2017 / 13:51

2 respostas

6

Acho que screen é uma solução ideal para você. Como funciona - você se conecta ao seu VPS, digite screen , execute seu script e desconecte-se do shell (feche a janela do terminal ou pressione ctrl+a seguido por ctrl+d )

Seu script (e shell) continuará sendo executado em segundo plano. Você pode visualizar o número screen digitando screen -ls . Para restaurar sua sessão e ver o progresso / resultado de seu script, obtenha o número da tela com screen -ls e, em seguida, conecte-se a ele com screen -r <screen number> . E é isso. Depois de restaurar, você pode separar da mesma maneira novamente.

Você pode instalar a tela no seu VPS com apt-get install screen para distribuições baseadas em Debian e yum install screen para distribuições baseadas em RedHat.

    
por 23.01.2017 / 13:59
1

Você também pode executar o script em segundo plano e acessar a saída quando precisar dela. Meu script de teste será bastante simples:

root@jump:~# cat test.sh
#!/bin/bash
for ((i=0; i<=99999; i+=1)); do
    echo $i
    sleep 1
done

Apenas imprime um número por segundo. Para executá-lo em segundo plano, mal uso em:

root@jump:~# at now
warning: commands will be executed using /bin/sh
at> /root/test.sh
at> <EOT>

Observação: o EOT é feito com Control & D. Depois disso, deixe o script rodar, desconecte do servidor. Quando você quiser ver a saída, conecte e encontre o PID do processo:

root@jump:~# ps aux | grep test
root      6312  0.0  2.1  18048  2836 ?        SN   13:08   0:00    /bin/bash /root/test.sh

E obtenha a saída. Substitua 6312 pelo PID do seu processo:

root@jump:~# tail -f /proc/6312/fd/1
137
138
139
140
141
^C

fd / 1 = stdout, fd / 2 = stderr

    
por 23.01.2017 / 14:15