2017-12-01 5 views
0

私はシェルスクリプトを使用して、ループ内でqsubを呼び出してコンピューティングクラスタ上でいくつかのジョブを起動します。ループを使用して、各ジョブに異なる開始値を与えます。コマンドラインからシェルスクリプトを実行するときに、単純に番号をシェルスクリプトに渡すだけで、要求する各ジョブのコア数を指定したかったのです。たとえば、可変リソース要求を伴うPBSディレクティブ

./lauchJobs.sh 8 

は、ノードあたり8コアを要求するジョブを起動します。私は

(私は3つの引数を期待しているのではい、技術的に私の最初の例は./launchJobs.sh 8 1 50のようなものされている必要があります)

#!/bin/tcsh 
#check that all input arguments are there 
if ($# != 3) then 
    echo "This script requires three input arguments: (i) number of cores per job, (ii) starting guessNum, (iii) ending guessNum" 
else 
    foreach iNum (`seq $2 1 $3`) #loop over guess numbers 
     qsub -v iGuess=${iNum} estimate.pbs 
    end 
endif 

でこれを行うことを試みそしてestimate.pbsは

#!/bin/tcsh 
#PBS -l pmem=1gb,nodes=1:ppn=${nCores},walltime=60:00:00 

から始まりました問題は、${nCores}がPBSディレクティブ内にあるので、シェルスクリプトから渡された値に解決されなかったということです。

./lauchJobs.sh 8のように、スクリプトに渡すことによって要求するコアの数を指定できるようにするスクリプトファイルとPBSファイルを記述することは可能ですか?

+0

'HERE'文書はあなたを助けることができるかもしれません。 ( '[tcsh] HERE'を検索するか、' 'EOF''や' 'EOS''に変更がない場合(多くは可能ですが、それらは非常に一般的です) PBSディレクティブファイルの先頭に「tcsh」がありますが、PBSが何であるかは分かりません。 – shellter

答えて

2

nodes=1:ppn=${nCores}をestimate.pbsに指定する必要はありません。

また、この方法では、qsubを呼び出すことができます。

qsub -l nodes=1:ppn=${1} -v iGuess=${iNum} estimate.pbs 
関連する問題