Exécuter le code sur une machine distante et copyr les résultats

J'utilise un vieux code Fortran qui utilise une certaine manipulation de la memory. Pour faire la longue histoire, il fonctionne sur ma machine locale mais échoue sur la télécommand. C'est la raison pour laquelle je voudrais ssh à mon ordinateur local pour exécuter le code et copyr les résultats dans le cluster sur lequel mes calculs sont exécutés.

J'ai déjà trouvé exactement la même question sur ce forum:

  • Comment écrire un script bash, qui se connecte à une autre machine pour faire des choses?

EDIT # 1

Après le commentaire de @Anthon, j'ai corrigé mon script, malheureusement une nouvelle erreur s'est produite. REMARQUE: j'utilise des keys ssh, donc aucun mot de passe n'est nécessaire.

Mon nouveau 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" 

Mon problème est que run.sh est un script maître appelant d'autres scripts shell, et ils ne s'exécutent pas correctement. Je reçois le message suivant:

/home/run_dir_script/run.sh: line 59: /home/run_dir_script/merge_tabs.sh: Aucun file ou directory

Exemple minimal:

Voici un exemple condensé de ce que je fais

Exemple run.sh

 #! /usr/bin/bash pwd echo "Run the code" ./HELLO_WORLD 

Le script ci-dessus est exécuté par

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

Pour plus de détails, le code fortran ./HELLO_WORLD

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

Comstackr avec gfortran -o HELLO_WORLD hello_world.F90

Et voici la sortie

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

Remarque:

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

Donc, appeler le code directement fonctionne bien. L'appeler via le script échoue.

Solution possible:

La raison pour laquelle cela échoue est dû au fait que, après ssh je atterris dans $HOME ma machine distante.

Par conséquent, avant d'exécuter le script, je dois cd dans le directory approprié. La bonne méthode, en plus de donner le path absolu est:

Une autre remarque utile est que toutes les variables de .bashrc ne sont pas définies. Par conséquent, il faut être prudent.

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

Donc cela fonctionne en quelque sorte

Il n'y a rien après sur la ligne après ssh -X usr@machene_wehere_i_run_the_code dans votre code. Ainsi cette command se connecte sur machene_wehere_i_run_the_code et ne fait rien.

Dans l'exemple de l'appel ssh dans la réponse acceptée de la question que vous citez, il y a un paramètre supplémentaire:

 ssh user@host path_to_script 

et le path_to_script est manquant dans le vôtre.

Je voudrais essayer de mettre les arguments à ssh entre guillemets.

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

Aussi basé sur ce message d'erreur, il semble que le script ne peut pas find ce script:

/home/run_dir_script/run.sh: line 59: /home/run_dir_script/merge_tabs.sh: Aucun file ou directory

Aussi je bloquerais le scp de se produire si le ssh ne renvoie pas un statut réussi:

 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 

Le problème de fond est cependant qu'il y a un problème avec votre script localisant les scripts subordonnés sur le système distant. Il peut y avoir des variables qui sont définies lorsque vous vous connectez et exécutez votre script, par exemple lorsque vous vous connectez via ssh et exécutez votre script.

Pour cela, je comparerais la sortie d' env utilisant les deux methods.