(qsubで始まる)グリッドで実行されるシェルスクリプトをパラメーター化するにはどうすればよいですか?私はgetoptsを使用してパラメーターを読み取るシェルスクリプトを持っています。
(qsub script.sh -r firstparam -s secondparam ..)を開始すると、qsubでこの作業スクリプトがエラーメッセージを受け取ります。
qsub:無効なオプション-s
qsub:不正な-r値
qsubは、パラメーターはそれ自体のものであると考えています。まだ解決策を見つけていません。
ありがとう
私はそれを解決する方法を理解しました:エコー付きのシェルスクリプトのコマンドを出力し、結果をqsubにパイプします:
echo "./script.sh var1=13 var2=24" | qsub
Qsub -vオプションを使用するのが適切な方法です。
qsub -v par_name=par_value[,par_name=par_value...] script.sh
par_nameは、シェルスクリプトで変数として使用できます。
Volkの回答に加えて、リスト(-vで指定)の変数を参照するには、呼び出しで定義した名前を使用するだけです。したがって、次のようにqsubを呼び出したとします。
qsub -v foo='qux' myRunScript.sh
次にmyRunScript.sh
は次のようになります。
#!/bin/bash
#PBS -l nodes=1:ppn=16,walltime=0:00:59
#PBS -l mem=62000mb
#PBS -m abe
bar=${foo}
echo "${bar}"
出力される場所
qux
お役に立てれば!
この質問が適切な回答なしにどれほど長く続いたのかに本当に驚いています。 qsub
の特定のバージョンが指定されなかった可能性があります。 qsub
は少なくともTorqueに存在し、Sun Grid Engineにも存在する可能性があります。したがって、どちらを使用しているかを知ることが重要です。ここでいくつか話します。
qsub -F <arguments> command
manページ
これが私が通常それをどのように使用するかの例です。渡された引数をエコーするこのサンプルスクリプトから始めます。
$ cat testArgs.pbs
#!/usr/bin/env bash
echo $@
私はこのような仕事を提出します:
$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster
実行後の出力ファイルは次のようになります。
$ cat testArgs.pbs.o3883919
--here are the --args
qsub command [ command_args ]
manページ
シェルで実行する場合と同じように、コマンドの後に引数を追加するだけです。私はSGEをどこでも実行していないので、この例はありません。しかし、それは以下にあるSlurmと同じです
sbatch command [ command_args ]
manページ
ここでは、上記のトルクの例で使用したのと同じスクリプトを送信します。
$ sbatch testArgs.sh what the heck
Submitted batch job 104331
そして結果:
$ cat slurm-104331.out
what the heck
環境変数のエクスポートは、コマンドに引数を渡すこととは大きく異なります。
違いについてのよい議論はここにあります。
上記のqsub
の回答はすべて推奨-v
。明確にするために、-v
は環境変数をエクスポートします、-F
はコマンドに引数を渡します。
私は通常、引数を許可することでスクリプトをパラメーター化することを好みます。実際、このようなスクリプトを使用する方がはるかに一般的ですprocess_data.sh --threads 8
のようなことをするよりもexport THREADS=8; process_data.sh
。