在遠端機器上執行程式碼並將結果複製回來
我正在使用一些使用一些特殊記憶體處理的舊 Fortran 程式碼。長話短說,它在我的本地機器上執行,但在遠端機器上失敗。這就是為什麼我想
ssh
在我的本地電腦上執行程式碼並將結果複製回我正在執行我的計算的集群。我已經在這個論壇上找到了完全相同的問題:
編輯#1
在@Anthon 發表評論後,我更正了我的腳本,不幸的是出現了新錯誤。**注意:**我使用的是 ssh 密鑰,因此不需要密碼。
我的新腳本:
#! /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"
我的問題是
run.sh
一個主腳本呼叫其他 shell 腳本,它們執行不正常。我收到以下消息:/home/run_dir_script/run.sh:第 59 行:/home/run_dir_script/merge_tabs.sh:沒有這樣的文件或目錄
最小的例子:
這是我正在做的一個簡明範例
例子
run.sh
#! /usr/bin/bash pwd echo "Run the code" ./HELLO_WORLD
上面的腳本由
ssh usr@machene_wehere_i_run_the_code /home/run_dir_script/run.sh
為了完整起見,fortran 程式碼 ./HELLO_WORLD
program main write(*,*) 'Hello World' stop end
使用 gfortran -o HELLO_WORLD hello_world.F90 編譯
這是輸出
/home/run_dir_script/ Run the code /home/run_dir_script/test.sh: line 5: ./home/HELLO_WORLD: No such file or directory
評論:
The following will run `HELLO_WORLD` on the remote machine ssh usr@machene_wehere_i_run_the_code /home/run_dir_script/HELLO_WORLD
所以直接呼叫程式碼就可以了。通過腳本呼叫它失敗。
可能的解決方案:
失敗的原因是在 ssh 之後我登陸我的遠端機器的
$HOME
.因此,在執行腳本之前,我必須
cd
在正確的目錄中。除了給出絕對路徑外,正確的方法是:另一個有用的評論是,我 .bashrc 中的所有變數都是未定義的。因此,必須小心。
usr@machene_wehere_i_run_the_code "cd /home/run_dir_script ; run.sh"
所以這以某種方式有效
ssh -X usr@machene_wehere_i_run_the_code
在您的程式碼之後的行之後沒有任何內容。所以該命令登錄machene_wehere_i_run_the_code
並且什麼都不做。在您引用的問題的已接受答案中的範例 ssh 呼叫中,有一個額外的參數:
ssh user@host path_to_script
而
path_to_script
你的缺少。
我會嘗試將參數
ssh
放在雙引號中。ssh usr@machene_wehere_i_run_the_code "/home/run_dir_script/run.sh inp 8"
同樣基於該錯誤消息,聽起來腳本找不到此腳本:
/home/run_dir_script/run.sh:第 59 行:/home/run_dir_script/merge_tabs.sh:沒有這樣的文件或目錄
scp
如果ssh
沒有返回成功狀態,我也會阻止這種情況的發生: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
底線問題是您的腳本在遠端系統上定位從屬腳本存在問題。當您登錄並執行腳本時,可能會設置變數,而不是通過登錄並執行腳本時設置的變數
ssh
。對於這些,我將比較
env
使用這兩種方法的輸出。