概要
何かのジョブを投げるスクリプトなり、コマンドがあって、
それの実行を待ちたいとき、いろいろな方法があるとおもうが、
一つの例。
まとめ
いくつかあるので、それぞれスクリプト例をあげてみる。
ほかに、自分のジョブがなくてただまつだけ
共有計算機であれば、自分のidのジョブだけとかいろいろあるとおもいますが、
今回のは、たんに、qstat
の結果だけを利用する。
ジョブのスクリプト
some_jobs_script.sh
# !/bin/bash
sleep 30
ジョブを投げてそれを待つスクリプト
wait.sh
# !/bin/bash
function waitfunction() {
while :
do
RET=$(qstat | wc -l)
if [ $RET -eq 0 ]; then
return
else
echo "Sleep 5sec"
sleep 5
fi
done
}
echo "Start"
qsub some_jobs_script.sh
waitfunction
echo "Done"
qstatで出力される特定の文字列がなくなるのを待つ。
ジョブに名前がついていればそれで待つこともできる。
注意点としては、ジョブの名前が長い場合、qstatで出てくるかは、確認する
以下のスクリプトは、
wait_qsub_by_name.sh
# !/bin/bash
function waitfunction_by_jobname() {
while :
do
RET=$(qstat | grep $1 | wc -l)
if [ $RET -eq 0 ]; then
return
else
echo "Sleep 60sec"
sleep 60
fi
done
}
#
echo "Start"
# 最初の引数($1)の名前がでてこなくなるまで待つ
waitfunction_by_jobname $1
echo "Done"
使い方例
大量のジョブを投げるこのときに、接頭辞などでJOBNAMEをつける。
./wait_qsub_by_name.sh JOBNAME
``
## TODO 特定のjobidをまつ
qsubしたときに、ジョブのIDがわかれば、それをまつことができるのではないか?