リモートコンピュータからデータをコピー、実行、取得する方法は?

リモートコンピュータからデータをコピー、実行、取得する方法は?

リモートコンピュータでいくつかの計算を実行しようとしています。基本的に、いくつかのファイルをコンピュータにコピーし、ソフトウェアをロードし、計算を実行し、データを取得したいと思います。そのためにパスワードのない接続を作成しました。私が試したことは次のとおりです。

#!/bin/bash
scp ./* username@host:/home/tmp
work=$pwd
ssh username@host
cd /home/tmp
module purge
module load gcc/4.6.0 icc/11.1.075  ifort/11.1.075 compilers-extra mpi-openmpi/1.4.3-icc-11.1 vasp
mpirun -np 20 vasp > out.vasp 2>&1 &
scp ./* username@headnode:$work

スクリプトはファイルをコピーしてリモートシステムにログインするだけで、計算を開始しません。

ベストアンサー1

あなたの問題が何であるかよくわかりませんが、私の意見の2つが長すぎます。

  1. ログインするとすぐhost(ライン4)現在のスクリプトが停止し、対話的にいくつかの操作が行われるのを待ちます。ログアウトするときにのみスクリプトが続行されます(おそらく望むものではないかもしれません)。

    したがって、リモートサーバーで実行したいすべてをスタンドアロンシェルスクリプトに入れ、残りのデータと一緒にscpしてくださいssh username@host /path/to/my/script

    したがって:

#!/bin/bash
# your local script
scp ./inputs* ./do_stuff.sh username@host:/home/tmp
ssh username@host /home/tmp/do_stuff.sh
scp username@host:/home/tmp/outputs* .

#!/bin/bash
# script for remote execution do_stuff.sh
cd /home/tmp
module purge
module load gcc/4.6.0 icc/11.1.075  ifort/11.1.075 compilers-extra mpi-openmpi/1.4.3-icc-11.1 vasp
mpirun -np 20 vasp > out.vasp 2>&1

inputs*/をクラスターまたはクラスターからコピーする必要がある項目に置き換えますoutputs*。おそらく入力をコピーしたくないでしょう。以下を参照するスクリプトはdo_stuff.sh実行可能としてマークする必要があります。それでも機能しない場合(コピーするファイルシステムがそのオプションnoexecでマウントされているため)、次のように使用しますssh username@host bash /home/tmp/do_stuff.sh。またはリモートシステムにパイプすることもできます。

cat do_stuff.sh | ssh username@host bash -

2)このプログラムを実行している場合(表示されているように見える)、headnodeプログラムを再実行して1方向のscp接続を削除できます。scpheadnode

おすすめ記事