2012-03-15 16 views
4

私は一連のジョブをSGEに提出しようとしています(FWIW、一連のGromacs分子動力学シミュレーションです)。input01,input02などの接尾辞を除いてすべてのジョブが同じです。接尾辞が一連のコマンドによって適切に処理されるように実行するコマンドを書いた。Sun Grid Engineに環境変数を正しく渡す方法は?

しかし、私はexec環境にその変数を受け取る方法を見つけることができません。 qsubのマニュアルページによれば、-v varがそれを行う必要があります。 (上記exportコマンドと同じセッションで)次のように

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

私は仕事を提出:

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

はその後、私はそれを受け取っていますかどうかを確認するために、次のスクリプト(run.sh)を提出

$ 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 

私はrun.shの先頭に行i=19を追加した場合、出力は次のようになります。私は今、生成検討している

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

ジョブごとに1つのファイルがありますが、基本的には同じですが、最初にi=xx行があります。それはあまり実用的に見えませんが、解決策になります。

もっと良い解決策がありますか?

+0

'qsubの-N「test_env」-cwd -v =「$ i」の実行を.sh'はうまくいくはずです。 –

答えて

1

変数が単なるインクリメントカウンタであると仮定します。これを実現するにはArray Jobsを使用できます。これにより、$SGE_TASK_IDという環境変数がカウントに設定され、$iにコピーするか、直接使用できます。

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

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

とスクリプトrun.sh:

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

私はsend.shを呼び出すときに、.oのはの出力を持っている私は常に次さを行ってきた何

6

10.

+0

ありがとうございます。これは、余分なタイピングを最小限に抑え、.shスクリプトが別のプログラム(Rでテスト済み)を呼び出すときにも機能します。 –

1

変数名をqsubで渡すことはできません。私は(あなたは、おそらくこのため、フロントエンドのスクリプトを書く代わりに、対話的にそれをやってなければならない)通過値で成功を収めてきました:

$ export ii=19 
$ qsub -N "test_env" -cwd -v i=$ii run.sh 
関連する問題