41

いくつかの qsub ジョブを開始するバッチ スクリプトがあり、それらがすべて完了したときにトラップしたいと考えています。

-sync オプションを使用したくありません。それらを同時に実行したいからです。各ジョブには、異なるコマンド ライン パラメータのセットがあります。

すべてのジョブが完了するまでスクリプトを待機させ、その後何かを実行したいと考えています。リソースを浪費するため、特定のファイルが 30 秒ごとに生成されたかどうかを確認するなどのスリープ機能を使用したくありません。

Torque にはいくつかのオプションがあると思いますが、私は SGE を実行しています。

これをどのように実装できるかについてのアイデアはありますか?

ありがとう Ps 私は別のスレッドを見つけました リンク

反応があったもの

すべてのジョブが完了するまで、wait を使用して実行を停止できます。特定の ID を待って循環する場合は、すべての終了ステータスとその他の実行中の統計情報 (かかった時間、その時点で実行されたジョブの数など) を収集することもできます。

しかし、何らかの値をポーリングせずに使用する方法がわかりません。bash トラップを使用できますが、qsub を使用するにはどうすればよいですか?

4

9 に答える 9

38

-N オプションを使用して任意の名前 (job1、job2 など) を付けて、qsub ジョブを起動します。

qsub -N job1 -cwd ./job1_script
qsub -N job2 -cwd ./job2_script
qsub -N job3 -cwd ./job3_script

スクリプトを起動し、job1、job2、および job3 という名前のジョブが終了するまで待機してから開始するように指示します。

qsub -hold_jid job1,job2,job3 -cwd ./results_script
于 2013-05-31T15:47:23.393 に答える
4

別の選択肢 (ここから) は次のとおりです。

FIRST=$(qsub job1.pbs)
echo $FIRST
SECOND=$(qsub -W depend=afterany:$FIRST job2.pbs)
echo $SECOND
THIRD=$(qsub -W depend=afterany:$SECOND job3.pbs)
echo $THIRD

洞察は、qsub がジョブ ID を返し、これが通常、標準出力にダンプされることです。代わりに、変数 ( $FIRST$SECOND$THIRD) でキャプチャし、ジョブをキューに入れるときにフラグを使用して-W depend=afterany:[JOBIDs]、ジョブがキューから取り出されるときの依存構造を制御します。

于 2015-12-10T18:22:12.450 に答える
3
qsub -hold_jid job1,job2,job3 -cwd ./myscript
于 2012-09-03T20:27:32.540 に答える
1

処理したいファイルが 150 個あり、毎回 15 個しか実行できない場合、他のファイルがキューに保持されている間、次のように設定できます。

# split my list files in a junk of small list having 10 file each
awk 'NR%10==1 {x="F"++i;}{ print >  "list_part"x".txt" }'  list.txt

各 list_part*.txt の最初のものが 2 番目のジョブを保持するように、すべてのジョブを qsub し、....2 番目のジョブが 3 番目のジョブを保持するようにします....

for list in $( ls list_part*.txt ) ; do
    PREV_JOB=$(qsub start.sh) # create a dummy script start.sh just for starting
 for file in  $(cat $list )  ; do
   NEXT_JOB=$(qsub -v file=$file  -W depend=afterany:$PREV_JOB  myscript.sh )
   PREV_JOB=$NEXT_JOB
 done
done

これは、myscript.sh に多くのファイルの移動またはダウンロードを必要とする手順がある場合、またはクラスター LAN で激しいトラフィックを作成する場合に役立ちます。

于 2016-03-17T13:46:26.383 に答える
1

ジョブ配列を開始するqsub -N jobname -t 1-"$numofjobs" -tc 20と、ジョブ ID が 1 つだけになり、一度に 20 個実行されます。名前を付けて、その配列がqsub -hold_jid jidorを使用して完了するまで保持しqsub -hold_jid jobnameます。

于 2020-06-05T09:02:23.637 に答える