私はシェルスクリプトを使用して、ループ内で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ファイルを記述することは可能ですか?
'HERE'文書はあなたを助けることができるかもしれません。 ( '[tcsh] HERE'を検索するか、' 'EOF''や' 'EOS''に変更がない場合(多くは可能ですが、それらは非常に一般的です) PBSディレクティブファイルの先頭に「tcsh」がありますが、PBSが何であるかは分かりません。 – shellter