12

ジョブを送信する前に、パラメーターを .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 XXXXXX@XXX.edu

cd /scratch/XXXXXX/pass_test

./run_test $FILENUM

でも、これはちょっとイマイチな気がします。特に、これを処理するために環境変数を作成する必要はありません。

4

3 に答える 3

10

この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 XXXXXX@XXX.edu

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 XXXXXX@XXX.edu -
cd /scratch/XXXXXX/pass_test
./run_test $i
EOS
done
于 2012-04-10T18:40:35.577 に答える
0

数値を渡し、入力ファイル番号を除いて同じコマンドでジョブのリストを実行するだけでよい場合は、 for ループの代わりにジョブ配列を使用することをお勧めします。

実行するには、pbs ファイルで次のように PBS_ARRAYID でファイル番号を指定します。

./run_test ${PBS_ARRAYID}

それを呼び出すには、コマンド ラインで次のように入力します。

qsub -t 1-10 pass_test.pbs

-tオプションの後に使用する配列 ID を指定できる場所

于 2016-08-03T18:22:32.300 に答える