3.6.2 条件付き実行
- 〈この項の構成〉
(1) JOB要素でCOND属性を指定した場合
ジョブ内の各ジョブステップの終了時点で,各ジョブステップが生成する終了コードとJOB要素のCOND属性で指定した演算符号を基に論理演算をする。
-
論理演算結果が真の場合
後続のジョブステップを実行しないで,そのジョブは終了する。
-
論理演算結果が偽の場合
そのまま後続のジョブステップを実行する。
JOB要素のCOND属性で終了コードの判定条件を指定した場合の流れの例を次の図に示す。
図3-7は,「ジョブ中のどれかのステップの終了コードが0以外である」という条件(下線部の「0,NE」指定)を満たした時点で,後続のジョブステップをすべて実行しないでジョブを終了する例である。
(2) EXEC要素のCOND属性で終了コードの判定条件を指定した場合
EXEC要素のCOND属性で指定したジョブステップの実行開始時点で,次に示す処理をする。
(a) 先行するジョブステップ名を指定しない場合
設定ファイルのEXEC_COND_NOSTEPNAMEパラメータにSTEPALLを指定するか,またはEXEC_COND_NOSTEPNAMEパラメータを指定していない場合,先行するジョブステップが生成するすべての終了コードとEXEC要素のCOND属性で指定した演算符号を基に論理演算をする。また,設定ファイルのEXEC_COND_NOSTEPNAMEパラメータにSTEPLASTを指定した場合,最後に実行されたジョブステップが生成する終了コードだけと論理演算をする。
-
論理演算結果が真の場合
そのジョブステップの実行をスキップして,後続するジョブステップの処理へ移る。
-
論理演算結果が偽の場合
そのジョブステップを実行する。
(b) 先行するジョブステップ名を指定した場合
指定した先行するジョブステップが生成する終了コードとEXEC要素のCOND属性で指定した演算符号を基に論理演算をする。論理演算結果の後処理は,(a)と同じである。
また,指定した先行するジョブステップが条件付き実行によって実行がスキップされている場合は,EXEC要素のCOND属性は無視される(COND属性が指定されなかったものとして処理される)。ジョブ内で重複しているジョブステップ名を指定した場合,最初に一致したジョブステップに対して論理演算をする。
EXEC要素のCOND属性で終了コードの判定条件を指定した場合の流れの例を次の図に示す。
図3-8は,STEP2を実行する前に「STEP1の終了コードが0以外」という条件(下線部の「0,NE,STEP1」指定)をチェックし,条件を満たした場合にはSTEP2を実行しないで,その次のステップSTEP3を実行する例である。
(3) EXEC要素のCOND属性でEVENまたはONLYを指定した場合
EXEC要素のCOND属性を指定したジョブステップの実行開始時点で,次に示す処理をする。
-
EVENを指定した場合,無条件に該当するジョブステップを実行する。
-
ONLYを指定した場合,1つ以上の先行するジョブステップのどれかが異常終了している場合に,該当するジョブステップを実行する。
-
EVENまたはONLYがジョブステップの終了コードの判定条件とともに指定している場合,終了コードの判定条件を満たすと,EVENまたはONLYを無視し,そのジョブステップを実行しない。
-
先行するジョブステップが異常終了した場合,後続のジョブステップにEVENまたはONLYの指定がないかぎり,該当するジョブステップをスキップする。
EXEC要素のCOND属性でEVENを指定した場合の流れの例を次の図に示す。
図3-9は,仮にSTEP1のプログラム MYPROG1 が異常終了した場合でも,COND="EVEN"指定(下線部)によってSTEP2は必ず実行される例である。
EXEC要素のCOND属性でONLYを指定した場合の流れの例を次の図に示す。
図3-10は,STEP1のプログラム MYPROG1が異常終了した場合にだけ,COND="ONLY"指定(下線部)によってSTEP2が実行される例である。
ジョブステップの条件付きの実行を次の図に示す。
ジョブステップ2がジョブステップ1の終了コード判定でスキップされるケースがある。この場合,ジョブステップ3でジョブステップ2の終了コードの条件判定をしているが,ジョブステップ2をスキップしているとき,EXEC要素のCOND属性の指定は無視して,ジョブステップ3を実行する。
条件1(COND属性の(6,LT,STEP4))を判定したが,この条件を満たさないため条件2(COND属性の(5,LT))の判定をする。条件2の場合,ジョブステップ名がないためすべての先行するジョブステップの終了コードとの判定をするが,この場合も条件を満たさないためジョブステップ5を実行する。