Ejecute el código en la máquina remota y copie los resultados

Ejecute el código en la máquina remota y copie los resultados

Estoy usando un código antiguo de Fortran que utiliza un manejo de memoria peculiar. Para abreviar la historia, se ejecuta en mi máquina local pero falla en la remota. Es por eso que me gustaría sshejecutar el código en mi computadora local y copiar los resultados al clúster en el que estoy ejecutando mis cálculos.

Ya encontré exactamente la misma pregunta en este foro:

EDITAR #1

Después del comentario de @Anthon, corregí mi script, desafortunadamente ocurrió un nuevo error.NOTA:Estoy usando claves ssh por lo que no se necesitan contraseñas.

Mi nuevo guión:
#! /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"

Mi problema es que run.shes un script maestro que llama a otros scripts de Shell y no se ejecutan correctamente. Recibo el siguiente mensaje:

/home/run_dir_script/run.sh: línea 59: /home/run_dir_script/merge_tabs.sh: No existe tal archivo o directorio

Ejemplo mínimo:

Aquí hay un ejemplo condensado de lo que estoy haciendo.

Ejemplorun.sh

#! /usr/bin/bash

pwd
echo "Run the code"
./HELLO_WORLD

El script anterior es ejecutado por

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

Para completar, el código Fortran ./HELLO_WORLD

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

Compile con gfortran -o HELLO_WORLD hello_world.F90

Y aquí está la salida.

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

Observación:

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

Entonces llamar al código directamente funciona bien. Llamarlo a través del script falla.

Solución posible:

La razón por la que esto falla se debe al hecho de que después de ssh aterrizo en el archivo $HOME.

Por lo tanto, antes de ejecutar el script, debo hacerlo cden el directorio adecuado. El método correcto, además de dar la ruta absoluta, es:

Otra observación útil es que todas las variables de .bashrc no están definidas. Por eso hay que tener cuidado.

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

Entonces esto de alguna manera funciona

Respuesta1

Intentaría poner los argumentos sshentre comillas dobles.

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

También según ese mensaje de error, parece que el script no puede encontrar este script:

/home/run_dir_script/run.sh: línea 59: /home/run_dir_script/merge_tabs.sh: No existe tal archivo o directorio

También bloquearía que esto scpsuceda si sshno devuelve un estado exitoso:

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

Sin embargo, el problema fundamental es que hay un problema con el script al localizar los scripts subordinados en el sistema remoto. Puede haber variables que se configuran cuando inicia sesión y ejecuta su secuencia de comandos, en comparación con cuando inicia sesión sshy ejecuta su secuencia de comandos.

Para estos, compararía el resultado de envusar ambos métodos.

Respuesta2

No hay nada después en la línea posterior ssh -X usr@machene_wehere_i_run_the_codede su código. Entonces ese comando inicia sesión machene_wehere_i_run_the_codey no hace nada.

En el ejemplo de llamada ssh, en la respuesta aceptada de la pregunta que usted cita, hay un parámetro adicional:

ssh user@host path_to_script

y el path_to_scriptfalta en el tuyo.

información relacionada