2016-10-06 19 views
1

SGEグリッドジョブのシーケンスを合理化するというジレンマがありますが、その中には依存関係がありますが、正しい方法は-hold_jidです。SGEグリッドジョブ依存

job1: qsub -N job1 ... 
job2: qsub -N job2 -hold_jid job1 
job3: qsub -N job3 -hold_jid job2 

、実行の順序はjob1-> job2-> JOB3であることが保証されています

は、我々のような仕事をしていると仮定します。しかし

、job2aを言って、複雑なJOB2の中に、埋め込まれたSGEジョブがあるとします。この場合は

job2a: qsub -N job2a.${timestamp_of_submission} 

job2aが完了した後、私は確かJOB3の実行を作るための方法を考え出したていません。

attempt1:

qsub -N job3 -hold_jid job2 ... 

その後JOB2が終了するまで確実にJOB3待機は、しかし、JOB3は私が望んでjob2a、後に実行されるという保証はありません。

attempt2:

qsub -N job3 -hold_jid job2a* ... 

その後、JOB3はJOB2の実行を開始するまでjob2aは、ジョブ配列に示されていないので、すぐに実行しているようです。注意投稿のタイムスタンプはあらかじめ推測するのが難しいので、上記の*を使用してjob2aの正確な名前を指定しないようにしました。

誰かがjob1-> job2-> job2a-> job3のように依存関係のチェーンを達成する方法を知っていますか? ありがとう!また、動作するはずですジョブIDを取得する、あるいは、

qsub -N job2 
qsub -N job2a 
qsub -N job3 -hold_jid job2,job2a.${timestamp_of_submission} 

答えて

0

あなたは-hold_jidジョブIDのリストを与えて試してみました

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;") 
qsub -N job3 -hold_jid job2,${job2a} 

EDIT

コメントに基づいて

、仕事のIDのリストを取得する必要があります。

は、だから私は、次のことをお勧め:

仕事2.のため

job2list=$(qsub -N job2 | perl -p -e "s/Your job (\d+) .*/\1/g;") 

上記店舗ジョブIDを次にあなたがjob2aタイプのジョブを提出するたびに実行します。

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;") 
job2list="${job2list},${job2a}" 

上記は、job2のidにjob2aのジョブIDを追加します。

ときに行うジョブ3を提出する準備ができて:

qsub -N job3 -hold_jid ${job2list} 
+0

感謝しかし、これは私のために動作しませんでした。確かにjob2aための複数のサブジョブがあるので、私の場合、私は* job2a、-hold_jid JOB2を試してみましたすべて同じ接頭辞「job2a」を持ちます。実行時に、job3はjob2が完了するのを待っていましたが、job2a *ジョブが完了するのを待っていませんでした。 – galactica

+0

明確にするために、すべてのjob2aジョブIDを '-hold_jid'オプションに追加しましたか、ワイルドカード(' * ')を使用しましたか? – Vince

+0

私はワイルドカードを使用しました。これは、オンザフライでジョブ名のすべてを列挙することはできません。つまり、送信のタイムスタンプのリスト – galactica