リモートコンピュータでいくつかの計算を実行しようとしています。基本的に、いくつかのファイルをコンピュータにコピーし、ソフトウェアをロードし、計算を実行し、データを取得したいと思います。そのためにパスワードのない接続を作成しました。私が試したことは次のとおりです。
#!/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つが長すぎます。
ログインするとすぐ
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接続を削除できます。scp
headnode