Mantenha os processos ativos após o logout do SSH

5

Estou tentando medir a largura de banda, a perda de pacotes, a latência e o jitter entre dois computadores em uma conexão de rede sem fio 802.11s.

Estou tentando fazer um (meu primeiro) script bash que pode fazer o seguinte:

  1. SSH para outro computador e comece a registrar dados dos serviços ( ptpd , tcpdump , iperf ).
  2. Inicie os mesmos processos no meu computador e comece a registrar dados.
  3. Quando a transmissão de iperf no meu computador estiver concluída, o SSH deverá ser enviado para o computador remoto e os serviços serão eliminados.

A idéia é que essas três etapas sejam executadas em um loop, aumentando o tamanho do pacote transmitido pelo iperf para cada iteração e registrando os dados resultantes.

Eu sei como iniciar um processo no pc remoto por ssh host@adress process .

No entanto, eu não sei como iniciar vários processos por meio do SSH e do logout, já que os processos são finalizados assim que eu efetuo o logout. Eu olhei os comandos screen e nohup , mas não sei como usá-los em um script.

Obrigado antecipadamente!

EDITAR:

Obrigado por toda a ajuda até agora.

Eu tenho nohup para trabalhar agora, foi bem simples como as pessoas apontaram. Então agora eu tenho: ssh host@adress nohup ./script.sh > /dev/null 2>&1 & no script no meu pc principal. Isso inicia um script no PC remoto bem e, em seguida, o logout do SSH. O próximo problema é como executar o script no pc remoto como sudo, já que isso é necessário para o tcpdump.

A tentativa de ssh host@adress **sudo** nohup ./script.sh > /dev/null 2>&1 & não funciona.

Alguma idéia?

EDIT 2:

Se alguém está com o mesmo problema, eu encontrei um guia para resolver isso:

link

    
por Thomas 19.07.2012 / 18:36

4 respostas

7

Use screen .

Alguns atalhos úteis:

  • ctrl + a + c: cria uma nova "janela"
  • ctrl + a + n: vai para a próxima "janela"
  • ctrl + a + p: vai para a "janela" anterior
  • ctrl + a + d: desanexe a sessão (ela continua sendo executada)

Após desanexar, use screen -r para retomar a sessão. Há também screen -x se a sessão de tela não foi desanexada, mas entrou em segundo plano de alguma outra forma (ou ainda está sendo executada em outro terminal).

    
por 19.07.2012 / 18:45
5

De um --help on nohup ;

Usage: nohup COMMAND [ARG]...
  or:  nohup OPTION
Run COMMAND, ignoring hangup signals.

Basta adicionar um & ao seu comando nohup <whatever you want to run> . Isso significará que, a menos que você mate especificamente o processo nohup gerado, ele nunca irá embora.

Você pode pular nohup totalmente com screen ou tmux , o que eu ouço manterá os processos em execução mesmo se a conexão com o host remoto estiver inativa (o que é uma das forças mais impressionantes). Eu não sei como fazer isso, então você precisará fazer sua própria leitura fazendo um man screen / man tmux depois de baixá-lo.

    
por 19.07.2012 / 18:44
2

Você pode preceder um programa com nohup .

Por exemplo %código%. Isso iniciará o programa e enviará todas as saídas para um arquivo chamado nohup.out. Ele também irá capturar o sigHUP quando você sair.

Outra solução é executar nohup myprogram & ou screen

    
por 19.07.2012 / 18:44
0

A resposta está na sua pergunta. Use os comandos screen ou nohup . O que você não entende sobre como usá-los?

Tente

ssh host@address nohup command args & . O & coloca o shell ssh em segundo plano no sistema local, o que significa que o túnel ssh permanecerá o maior tempo possível. Mas o comando nohup impedirá que o command em execução no sistema remoto seja finalizado se, por algum motivo, o processo ssh local terminar ou perder a conexão com o host remoto.

    
por 19.07.2012 / 18:47