質問

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

私が開始すると(qsub script.sh -r firstparam -s secondparam ..)qsubを使用したこの作業スクリプトは、エラーメッセージを受信します。

QSUB:無効なオプション-S

QSUB:違法-R値

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

ありがとう

役に立ちましたか?

解決 3

私はそれを解決する方法を見つけました:シェルスクリップのコマンドをエコーで印刷し、結果を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 少なくともトルクとサングリッドエンジン、おそらく他のスケジューラーに存在します。したがって、どちらを使用しているかを知ることが重要です。ここでいくつか話します:

トルク: qsub -F <arguments> command

男ページ
これが私が通常どのように使用するかの例です。この例から始めて、それに渡された引数をエコーするだけです。

$ 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 ]

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

Slurm: sbatch command [ command_args ]

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

$ 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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top