Execute o código na máquina remota e copie os resultados de volta

4

Estou usando algum código antigo do Fortran que usa algum tratamento peculiar de memória. Para encurtar a história, ela é executada na minha máquina local, mas falha na remota. É por isso que eu gostaria de ssh para meu computador local executar o código e copiar os resultados de volta para o cluster em que estou executando meus cálculos.

Eu já encontrei exatamente a mesma pergunta neste fórum:

EDIT # 1

Após o comentário de @Anthon, eu corrijo meu script, infelizmente um novo erro ocorreu. OBSERVAÇÃO: estou usando as chaves ssh, por isso não são necessárias senhas.

Meu novo script:
#! /bin/bash
# start form the machine_where_the_resutlst_are_needed

ssh usr@machene_wehere_i_run_the_code /home/run_dir_script/run.sh inp 8

# do the work by running a script. 8 jobs are run by sending them 
# to the background, 

scp -p usr@machene_wehere_i_run_the_code:/home/run_dir_script/results \
  user@machine_where_the_resutlst_are_needed:~/

echo "I am back"

Meu problema é que run.sh é um script mestre chamando outros scripts de shell e eles não são executados corretamente. Eu recebo a seguinte mensagem:

/home/run_dir_script/run.sh: line 59: /home/run_dir_script/merge_tabs.sh: No such file or directory

Exemplo mínimo:

Aqui está um exemplo condensado do que estou fazendo

Exemplo run.sh

#! /usr/bin/bash

pwd
echo "Run the code"
./HELLO_WORLD

O script acima é executado por

ssh usr@machene_wehere_i_run_the_code /home/run_dir_script/run.sh    

Para completar o código fortran ./HELLO_WORLD

program main
write(*,*) 'Hello World'
stop
end

Compile com     gfortran -o HELLO_WORLD hello_world.F90

E aqui está a saída

/home/run_dir_script/
Run the code
/home/run_dir_script/test.sh: line 5: ./home/HELLO_WORLD: No such file or directory

Observação:

The following will run 'HELLO_WORLD' on the remote machine
ssh usr@machene_wehere_i_run_the_code /home/run_dir_script/HELLO_WORLD

Então, chamar o código diretamente funciona bem. Chamar por meio do script falha.

Solução possível:

A razão pela qual isso falha é devido ao fato de que depois do ssh eu chego no $HOME da minha máquina remota.

Portanto, antes de executar o script, tenho que cd no diretório correto. O método correto, além de dar caminho absoluto é:

Outra observação útil é que todas as variáveis do .bashrc são indefinidas. Portanto, é preciso ter cuidado.

 usr@machene_wehere_i_run_the_code "cd /home/run_dir_script ; run.sh"

Então isso de alguma forma funciona

    
por Alexander Cska 16.11.2014 / 14:03

2 respostas

1

Não há nada depois na linha após ssh -X usr@machene_wehere_i_run_the_code em seu código. Então esse comando entra no machene_wehere_i_run_the_code e não faz nada.

No exemplo da chamada ssh na resposta aceita da pergunta que você cita, há um parâmetro extra:

ssh user@host path_to_script

e o path_to_script está faltando no seu.

    
por 16.11.2014 / 14:22
3

Eu tentaria colocar os argumentos em ssh entre aspas duplas.

ssh usr@machene_wehere_i_run_the_code "/home/run_dir_script/run.sh inp 8"

Também com base nessa mensagem de erro, parece que o script não pode encontrar esse script:

/home/run_dir_script/run.sh: line 59: /home/run_dir_script/merge_tabs.sh: No such file or directory

Além disso, eu bloquearia o scp se o ssh não retornasse um status bem-sucedido:

ssh usr@machene_wehere_i_run_the_code "/home/run_dir_script/run.sh inp 8"
status=$?

if $status; then
  scp -p usr@machene_wehere_i_run_the_code:/home/run_dir_script/results \
    user@machine_where_the_resutlst_are_needed:~/
fi

O principal problema é que há um problema com o script localizando os scripts subordinados no sistema remoto. Pode haver variáveis que são definidas quando você faz login e executa seu script, quando você faz login via ssh e executa seu script.

Para estes, eu compararia a saída de env usando os dois métodos.

    
por 16.11.2014 / 15:50