2012-04-10 17 views
9

ジョブを送信する前に.pbsスクリプトにパラメータを直接渡す方法はありますか?私は別の番号で示されたファイルのリストをループし、各ファイルを分析するスクリプトを適用する必要があります。pbsスクリプトにパラメータを直接渡す

私が思い付くことができました最高のは以下の通りです:

#!/bin/sh 

for ((i= 1; i<= 10; i++)) 
do 
     export FILENUM=$i 
     qsub pass_test.pbs 
done 

pass_test.pbsは次のスクリプトです:

#!/bin/sh 

#PBS -V 
#PBS -S /bin/sh 
#PBS -N pass_test 
#PBS -l nodes=1:ppn=1,walltime=00:02:00 
#PBS -M [email protected] 

cd /scratch/XXXXXX/pass_test 

./run_test $FILENUM 

しかし、これは少しグラグラ感じています。特に、これを処理するために環境変数を作成する必要はありません。

答えて

8

qsubユーティリティは、ここで使用して動的、あなたはその場でスクリプトを作成することができます文書化して、標準入力からスクリプトを読み込むことができます。個人的に

#!/bin/sh 

for i in `seq 1 10` 
do 
    cat <<EOS | qsub - 
#!/bin/sh 

#PBS -V 
#PBS -S /bin/sh 
#PBS -N pass_test 
#PBS -l nodes=1:ppn=1,walltime=00:02:00 
#PBS -M [email protected] 

cd /scratch/XXXXXX/pass_test 

./run_test $i 
EOS 
done 

、私はよりコンパクトなバージョンを使用します:ジョブ配列を持っているだろうと

#!/bin/sh 

for i in `seq 1 10` 
do 
    cat <<EOS | qsub -V -S /bin/sh -N pass_test -l nodes=1:ppn=1,walltime=00:02:00 -M [email protected] - 
cd /scratch/XXXXXX/pass_test 
./run_test $i 
EOS 
done 
0

あなただけの数字を渡し、入力ファイル数以外は同じコマンドを使用してジョブのリストを実行する必要がある場合は、forループの代わりにジョブ配列を使用することをお勧めしますジョブスケジューラの負担を軽減します。実行するには

、あなたがPBSファイルに次のようにPBS_ARRAYIDとファイル番号を指定します。

./run_test ${PBS_ARRAYID} 

とコマンドライン上で、それを呼び出すために、タイプ:あなたが指定することができ

qsub -t 1-10 pass_test.pbs 

-tオプションの後に使用する配列ID

関連する問題