Aguardando que um script seja executado no ssh para ser concluído antes de prosseguir com um script bash

3

Eu tenho um script que se parece com isso:

command1
command2
ssh login@machine_with_lots_of_ram:~/script_that_needs_ram.sh
command4 output_file_from_above

onde o comando 4 precisa da saída do comando ssh.

Como eu digo ao programa para esperar até que o script ssh termine antes de continuar? ou melhor ainda, como definir o script ssh em execução na máquina remota após o comando 1 e manter o programa executando o comando 4 até que ele termine?

    
por bioinformatics1 19.01.2017 / 23:40

2 respostas

3

A sessão SSH não será encerrada até que o comando (script) tenha terminado de ser executado no servidor remoto.

Dependendo se o script envia dados para um arquivo no servidor ou se envia dados para a saída padrão, você pode fazer uma de duas coisas.

  1. Se enviar dados para um arquivo no servidor:

    ssh user@host script.sh
    scp user@host:remote_output local_output
    process_output local_output
    

    Isso basicamente usa scp para copiar os dados do servidor para a máquina local.

  2. Se enviar dados para a saída padrão:

    ssh user@host script.sh >local_output
    process_output local_output
    

    Isso redireciona a saída padrão do script para um arquivo local.

Para definir o programa em execução primeiro e aguarde:

ssh user@host script.sh &

# do other stuff

wait
scp user@host:remote_output local_output
process_output local_output

ou

ssh user@host script.sh >local_output &

# do other stuff

wait
process_output local_output

O wait pausará o script até que o comando ssh (executado como um processo em segundo plano) seja encerrado.

    
por 20.01.2017 / 00:26
0

Se você precisar capturar a saída do comando remoto, algo como isto deve funcionar:

command1
command2
ssh login@machine_with_lots_of_ram "~/script_that_needs_ram.sh" > remote_output.log
command4 remote_output.log
# optionally:  rm remote_output.log

Se command4 receber a entrada padrão, você poderá até:

ssh login@machine_with_lots_of_ram "~/script_that_needs_ram.sh" | command4
    
por 20.01.2017 / 00:04

Tags