Hitachi

JP1 Version 12 JP1/Automatic Job Management System 3 設計ガイド(業務設計編)


2.4.6 ジョブが異常終了したときに特定の処理を実行する(リカバリーユニットを使ったジョブネットの定義例)

ジョブが異常終了したときにだけ処理を実行させるジョブネットの定義には,リカバリーユニットを使用します。

リカバリーユニットは,ジョブまたはジョブネットの属性定義で[種別]を[リカバリ]とすることで設定できます。また,リカバリー属性は,すべてのジョブおよびジョブネットに設定できます。

〈この項の構成〉

(1) リカバリージョブを使ったジョブネットの定義例

「在庫チェックを実行して,在庫数が十分であれば受注伝票を作成する。在庫数が不足している場合はジョブを異常終了して発注伝票を作成したあと,受注伝票を作成する」というジョブネットを,リカバリージョブ使って定義する例を次の図に示します。

図2‒91 リカバリージョブを使ったジョブネットの定義例

[図データ]

この例では,「在庫チェック」は,実行の結果,在庫数が不足している場合は戻り値5以上を返すものとします。

まず,「在庫チェック」の終了判定を[しきい値による判定]とし,[異常しきい値]を4とします。つまり,戻り値が4以下ならば正常終了,戻り値が5以上ならば異常終了します。「在庫チェック」が正常終了した場合に次に実行する「受注伝票作成」は,[種別]は[通常](デフォルト)のままにします。異常終了した場合に実行される「発注伝票作成」は,属性定義の[種別]を[リカバリ]とします。さらに「発注伝票作成」のあとに実行される「受注伝票作成R」も同様に[リカバリ]を設定します。リカバリーユニットの後続ユニットには,リカバリーユニットしか定義できません。

これによって,「在庫チェック」の実行結果,以降のジョブは次のように実行されます。

なお,先行ジョブの異常終了によって実行されたリカバリーユニットが正常終了しても,それらが定義されたジョブネット自体は「異常終了」になります。また,リカバリーユニットに先行ジョブが定義されていない場合,それらが実行されることはなく,「未実行終了」となります。

補足事項

ORジョブをリカバリージョブとして定義する場合は,ORジョブの先行ジョブとなるイベントジョブも後続ジョブもリカバリージョブとして定義します。

(2) 一つのリカバリーユニットに複数の先行ジョブを定義した例

一つのリカバリーユニットに対して複数の先行ジョブを定義できます。この場合,複数ある先行ジョブのすべてが異常終了したときにだけリカバリーユニットが実行されます。一つのリカバリージョブに複数の先行ジョブを定義した例を次の図に示します。

図2‒92 複数の先行ジョブを定義した例

[図データ]

この場合,リカバリージョブAは,標準ジョブA,標準ジョブB,および標準ジョブCすべてが異常終了した場合にだけ実行されます。また,リカバリージョブBはリカバリージョブAが正常終了したあとに実行されます。

(3) 異常終了したユニットの後続ユニットを再実行する定義例

異常終了したユニットの後続ユニットを再実行する場合,タイミングによっては再実行に失敗することがあります。ajsrerunコマンドの-rr-rnおよび-riオプションを指定し,リカバリーユニットからコマンドを実行することで,対象ユニットが終了状態でない場合に再実行をリトライできます。異常終了したユニットの後続ユニットを再実行する定義例を次の図に示します。

図2‒93 異常終了したユニットの後続ユニットを再実行する定義例

[図データ]

この場合,標準ジョブAが異常終了すると,リカバリージョブAがajsrerunコマンドで標準ジョブCを再実行します。標準ジョブCが終了状態でない場合は,再実行をリトライします。

リカバリーユニットから再実行する場合の詳細については,「JP1/Automatic Job Management System 3 導入ガイド 4.5.11 実行が終了したジョブネットやジョブを再実行する」を参照してください。

ajsrerunコマンドの詳細については,マニュアル「JP1/Automatic Job Management System 3 コマンドリファレンス 3. 通常の運用で使用するコマンド ajsrerun」を参照してください。

注意事項

異常終了したユニットの後続ユニットを再実行する場合,短い間隔で大量のリトライが実行されると,ジョブの実行に影響を与えるおそれがあります。リカバリーユニットで再実行を定義する場合は,次の点に注意してください。

  • 再実行のリトライ回数およびリトライ間隔は,デフォルト値で運用することを推奨します。再実行のリトライ回数およびリトライ間隔を変更する場合は,使用している環境で事前に処理時間を測定および検証し,余裕のある値を設定してください。なお,ジョブネットは配下のユニットがすべて終了してから終了します。このため,異常終了したユニットの後続ユニットが「未実行終了」状態になるまでの時間を測定する場合は,ユニットが異常終了してから後続ユニットがすべて「未実行終了」状態となり上位ジョブネットが異常終了するまでの時間を測定してください。そのあと,再実行のリトライ回数およびリトライ間隔を運用に合わせて検証してください。

  • 連続または同時にリトライを実行する場合は,リトライの間隔を空けてください。

  • -rr-rnおよび-riを指定したajsrerunコマンドを大量に実行しないように,-rr-rnおよび-riを指定したajsrerunコマンドを実行するリカバリージョブの実行エージェントに,ジョブの実行多重度の設定を検討してください。