48

グリッド上で実行されるシェルスクリプト(qsubで始まる)をパラメーター化するにはどうすればよいですか?getoptsを使用してパラメーターを読み取るシェルスクリプトがあります。

(qsub script.sh -r firstparam -s secondparam ..)を開始すると、qsubを使用してこの作業スクリプトにエラーメッセージが表示されます。

qsub:無効なオプション-s

qsub:不正な-r値

qsubは、パラメーターがそれ自体のためのものであると考えているためです。しかし、私は解決策を見つけていません。

ありがとう

4

4 に答える 4

45

qsub -vオプションを使用するのが適切な方法です:

qsub -v par_name=par_value[,par_name=par_value...] script.sh

par_nameは、シェルスクリプトの変数として使用できます。

于 2011-01-19T10:07:38.510 に答える
36

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

お役に立てれば!

于 2013-06-12T15:05:15.827 に答える
22

私はそれを解決する方法を理解しました:echoを使用してシェルスクリプトのコマンドを出力し、結果をqsubにパイプします:

echo "./script.sh var1=13 var2=24" | qsub

于 2010-09-01T13:25:17.470 に答える
20

より良い方法があります...

この質問が良い答えなしにどれだけ長く続いたかに私は本当に驚いています。の特定のバージョンがqsub指定されていない可能性があります。qsub少なくともTorqueとSunGridEngine、おそらく他のスケジューラに存在します。したがって、どちらを使用しているかを知ることが重要です。ここでいくつか話します:

トルク: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

Sun Grid Engine:qsub command [ command_args ]

マニュアルページ
シェルで実行する場合と同じように、コマンドの後に引数を追加するだけです。私はどこにもSGEを実行していないので、この例はありません。しかし、それは以下のSlurmでも同じです。

Slurm:sbatch command [ command_args ]

manページ
ここでは、上記のTorqueの例で使用したものと同じスクリプトを送信します。

$ 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ます。

于 2017-09-20T18:06:18.827 に答える