4

(一連の) ジョブを SGE に送信しようとしています (FWIW、Gromacs 分子動力学シミュレーションのシーケンスです)。すべてのジョブは、 、 などの接尾辞を除いて同一input01ですinput02。サフィックスが一連のコマンドによって適切に処理されるように実行します。

ただし、exec環境にその変数を受け取る方法が見つかりません。qsubマニュアルページによると、-v varそれを行う必要があります。

$ export i=19
$ export | grep ' i='
declare -x i="19"
$ env | grep '^i='
i=19

次に、次のスクリプト ( run.sh) を送信して、受信されるかどうかを確認します。

if [ "x" == "x$i" ]; then
    echo "ERROR: \$i not set"
else
    echo "SUCCESS: \$i is set"
fi

export次のようにジョブを送信します (上記のコマンドと同じセッションで)。

$ qsub -N "test_env" -cwd -v i run.sh
Your job 4606 ("test_env") has been submitted

エラー ストリームは空で、出力ストリームには次のものがあります。

$ cat test_env.o4606 
ERROR: $i not set

次のコマンドも試しましたが、失敗しました。

$ qsub -N "test_env" -cwd -v i -V run.sh
$ qsub -N "test_env" -cwd -V run.sh
$ qsub -N "test_env" -cwd -v i=19 -V run.sh
$ qsub -N "test_env" -cwd -v i=19 run.sh

i=19の先頭に行を追加するとrun.sh、出力は次のようになります。

$ cat test_env.o4613
SUCCESS: $i is set as 19

私は現在、ジョブごとに 1 つのファイルを生成することを検討しています。これは基本的に同じですがi=xx、最初の行が含まれます。あまり実用的ではないように見えますが、解決策になるでしょう。

より良い解決策はありますか?

4

3 に答える 3

7

私がいつも行っていることは次のとおりです。

##send.sh
export a=10
qsub ./run.sh

およびスクリプト run.sh:

##run.sh
#$ -V
echo $a

send.sh を呼び出すと、.o の出力は 10 になります。

于 2013-01-23T13:30:00.760 に答える
1

変数が単なる増分カウンターであると仮定すると、配列ジョブを使用してこれを実現できます。これにより、$SGE_TASK_ID環境変数がカウントに設定され、コピー$iまたは直接使用できるようになります。

変数がそれ以外の場合は、複数のジョブ スクリプトを生成し、それぞれを送信する必要があると思います。これは、さまざまなパラメーターを持つジョブがたくさんあるときに使用する「ソリューション」です。

于 2012-03-15T16:18:19.810 に答える
1

qsubを介して名前で変数を渡すことができるかどうかはわかりません。私は値を渡すことに成功しました (おそらく、対話的に行うのではなく、フロントエンド スクリプトを作成する必要があります)。

$ export ii=19
$ qsub -N "test_env" -cwd -v i=$ii run.sh
于 2013-02-21T22:19:28.557 に答える