5.6. ワークフロージョブ

ワークフロージョブは、ジョブ単位での実行制御(条件分岐や繰り返し)を行う複数のジョブのまとまりです。
ステップジョブと同様に、あるジョブの実行結果に応じて、次に実行するジョブが決まるような場合で利用しますが、実行制御を行うシェルスクリプトの内容次第で、ステップジョブより自由度が高い制御ができます。

参考

ワークフロージョブは、正確にはジョブの種類ではなく、複数のジョブの投入をシェルスクリプトによってユーザが制御する方法です。

5.6.1. ジョブの投入

ワークフロージョブでは、ジョブの投入をユーザがシェルスクリプトで制御します。

例えば、特定のジョブの終了を待ってから別のジョブを投入したり、あるジョブの結果によって次に投入するジョブを選択したりということをシェルスクリプトで自動的に行う方法です。
ユーザはジョブ運用ソフトウェアが提供するpjwaitコマンドを利用して、ジョブの投入制御を行います。
  • ジョブの終了待ち合わせ

    pjwaitコマンドを使用して、1つ以上のジョブの終了をシェルスクリプト内で待ち合わせることができます。

  • ジョブの実行結果の取得

    pjwaitコマンドを使用して、ジョブ終了コード (ジョブマネージャーの処理結果)、ジョブスクリプトの終了ステータス、ジョブスクリプト終了時のシグナル番号を得ることができます。

以下は、ワークフロージョブのフロー図です。

../_images/SubmittingAWorkFlowJob_01.png

このワークフロージョブをシェルスクリプトで記述すると以下のようになります。

#!/bin/sh
for no in 1 2 3                       # ジョブスクリプト job1.sh、job2.sh、job3.sh を順番に投入
do
  JID=`pjsub -z jid job${no}.sh`      # -z オプションでジョブID を表示させ、シェル変数 JID に代入
  if [ $? -ne 0 ]; then               # ジョブ投入結果が 0 以外の場合、ワークフロージョブ終了
    exit 1
  fi
  set -- `pjwait $JID`                # ジョブの終了を待ち合わせ、出力結果を位置パラメーターに代入 (注)
  if [ $2 != "0" -o $3 != "0" ]; then # ジョブ終了コード($2)とジョブスクリプトの終了ステータス($3)の
    exit 1                            # どちらかが 0 でない場合は、ワークフロージョブを終了
  fi
done                                  # 次のジョブの実行へ

注意

ジョブの種類、ジョブIDの指定によっては、出力結果が複数行になる場合があるため、注意が必要です。

出力結果については、pjwaitコマンドのmanマニュアルを参照してください。