About Me
- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
def_slot
のスロット数を qsub -v
オプションで引数として設定するという方法は、直接的にはできません。qsub -v
は環境変数をジョブに渡すためのオプションであり、#$ -pe def_slot N
のようにジョブの並列環境自体を設定するものではないためです。
前述の通り、スロット数を変数で指定するには、主に以下の2つの方法があります。
1. qsub
コマンド自体にオプションとして渡す方法
これが最もシンプルで推奨される方法です。
#!/bin/bash
N=4 # 必要なスロット数を変数に格納
qsub -pe def_slot $N your_script.sh
この方法では、qsub
コマンドを実行する際に -pe def_slot $N
のように指定することで、変数 $N
の値が展開され、qsub
に渡されます。your_script.sh
は実際のジョブスクリプトです。
2. envsubst
を使う方法
envsubst
を使う方法は、スクリプト内で変数を展開してから qsub
に渡す方法です。少し複雑ですが、スクリプト内で他の設定も変数で管理したい場合などに有効です。
#!/bin/bash
N=4
export N # envsubst に変数を認識させるために export が必要
cat << EOF | envsubst | qsub -
#!/bin/bash
#$ -pe def_slot ${N}
# 他のqsubオプションも変数で管理できる例
#$ -l mem_free=${MEM}G
# ここにジョブの内容
echo "Using ${N} slots and ${MEM}GB of memory."
EOF
この方法では、cat << EOF ... EOF
でヒアドキュメントを作成し、envsubst
に渡すことで、${N}
が展開された状態で qsub
に渡されます。${N}
のように {}
で囲むことで、変数名と後続の文字列が結合してしまうのを防ぐことができます。また、他のリソース要求(例:メモリ量 mem_free
)も変数で管理できます。
なぜ qsub -v
ではダメなのか?
qsub -v
は、ジョブスクリプト内で使用する環境変数を設定するために使用されます。例えば、以下のように使用します。
#!/bin/bash
MY_VAR="my_value"
qsub -v MY_VAR my_script.sh
my_script.sh
内では $MY_VAR
を参照することができ、値 "my_value" を取得できます。
しかし、#$ -pe def_slot N
は、ジョブが実行される並列環境を定義するものであり、ジョブスクリプト内で使用する変数とは性質が異なります。そのため、qsub -v
でスロット数を設定することはできません。
まとめ
def_slot
のスロット数を変数で指定する場合は、qsub
コマンドに直接オプションとして渡す方法(上記の方法1)が最も簡単で推奨されます。envsubst
を使う方法は、他の設定も変数で管理したい場合などに有効です。qsub -v
はジョブスクリプト内で使用する環境変数を設定するためのものであり、スロット数の設定には使用できません。
もし、上記の方法でうまくいかない場合は、以下の情報を提供していただけると、より具体的なアドバイスができます。
これらの情報があれば、問題の特定と解決がより容易になります。