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