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

[目次][用語][索引][前へ][次へ]

2.4.10 ジョブの異常終了時に自動でリトライする

ジョブに定義した実行ファイルが異常終了した場合に,ジョブをリトライすることで一時的なエラーを回復できることがあります。リトライによって回復できるジョブには,ジョブの異常終了時に自動的にジョブをリトライさせるように定義することで,実行ファイルに一時的なエラーが発生しても業務を継続できます。

ジョブに指定した実行ファイルが異常終了したときに,自動的にリトライすることを自動リトライといい,自動リトライによってジョブを実行することをリトライ実行といいます。

自動リトライした場合の,ジョブの動作を次の図に示します。

図2-98 自動リトライした場合のジョブの動作

[図データ]

自動リトライする場合,ジョブに定義した実行ファイルが異常終了しても,ジョブは「異常検出終了」状態になりません。一定の間隔を待ってから,ジョブが自動リトライされます。

<この項の構成>
(1) 自動リトライの概要
(2) リトライ設定のあるジョブの監視
(3) リトライ設定のあるジョブの実行シミュレーション
(4) リトライ設定のあるユニットの操作
(5) リトライ実行によって更新される情報
(6) リトライ中のスケジューラーサービスの再起動
(7) 自動リトライに関する注意事項

(1) 自動リトライの概要

自動リトライの概要について説明します。

(a) 自動リトライの条件

次の条件を満たすジョブの実行ファイルがエラーになった場合,ジョブは「異常検出終了」状態にならないで,自動リトライします。

注意事項
自動リトライに関する設定は,JP1/AJS3 - ViewおよびJP1/AJS3 - Managerのバージョンが10-00以降の場合に使用できます。ただし,10-00以降のJP1/AJS3 - Managerを使用していても,データベース構成が互換用ISAM構成の場合は使用できません。
(b) 自動リトライの実行方法に関する設定

自動リトライの実行方法に関する設定を,リトライ設定と呼びます。

リトライ設定の各項目について,次に示します。

表2-31 自動リトライの実行方法に関する設定項目

項番 設定項目 設定内容
1 異常終了時リトライ ジョブに指定した実行ファイルがエラーになったときに,自動リトライするかどうかを指定します。
2 終了コード リトライ実行する終了コードの範囲を指定します。
3 最大リトライ回数 リトライ実行する最大回数を指定します。
4 リトライ間隔 ジョブの実行ファイルがエラーになってから,リトライ実行するまでの間隔を指定します。
注意事項
終了コードは,必要最低限の範囲を設定してください。自動リトライする終了コードの範囲を必要以上に広く設定すると,リトライ実行しても回復する見込みのない終了コードもリトライ実行し,ジョブの実行数が増加してジョブ実行性能に影響を与えるおそれがあります。

リトライ設定をしているジョブが異常終了したときの動作を,次の図に示します。

図2-99 リトライ設定をしているジョブが異常終了したときの動作

[図データ]

リトライ設定をしているジョブに指定した実行ファイルが異常終了すると,リトライ間隔で設定した時間が経過してから,リトライ実行されます。リトライ実行は,ジョブが正常終了または警告終了するか,もしくはリトライ実行回数が最大リトライ回数に達するまで繰り返されます。

リトライ設定の内容は,JP1/AJS3 - Viewの画面およびコマンドで確認できます。確認できるJP1/AJS3 - Viewの画面およびコマンドと,確認できるリトライ設定を次に示します。

表2-32 リトライ設定を確認できるJP1/AJS3 - Viewの画面およびコマンド

項番 確認できるJP1/AJS3 - Viewの画面およびコマンド 確認できるリトライ設定
1 [ジョブネットエディタ]ウィンドウ 異常終了時リトライ
2 [検索]ウィンドウ
  • 最大リトライ回数
  • リトライ間隔
3 ajsprintコマンド すべてのリトライ設定
(c) 自動リトライの実行状況に関する情報

自動リトライの実行状況に関する次の情報を,リトライ情報と呼びます。

リトライ情報について,次に説明します。

リトライ状態
自動リトライが実行された場合の,自動リトライの進行状況です。
リトライ状態を次に示します。

表2-33 リトライ状態一覧

項番 リトライ状態 リトライ状態の意味 対応するジョブの状態
1 リトライ待ち ジョブの実行ファイルがエラーになって,リトライ間隔に設定した時間が経過するのを待っている。
  • 先行終了待ち
  • 保留中
2 リトライ実行中 自動リトライによって,ジョブが「実行待ち」,「キューイング」,または「実行中」状態である。
  • 実行待ち
  • キューイング
  • 実行中
3 リトライ終了 自動リトライが終了した。
  • 正常終了
  • 警告検出終了
  • 異常検出終了
  • 起動失敗
  • 終了状態不明
  • 計画未実行
など終了している状態
「リトライ待ち」,および「リトライ実行中」の状態をまとめてリトライ中といいます。
 
自動リトライが実行されたときの,状態遷移の例を次の図に示します。

図2-100 自動リトライが実行されたときの状態遷移

[図データ]
リトライ設定をしているジョブに指定した実行ファイルが異常終了すると,リトライ間隔で設定した時間,リトライ状態は「リトライ待ち」になります。このとき,ジョブは「先行終了待ち」状態になり,「異常検出終了」状態にはなりません。リトライ間隔で設定した時間が経過したら,リトライ状態は「リトライ実行中」になります。
リトライ実行回数が最大リトライ回数で設定した回数に達する前に,ジョブに指定した実行ファイルが正常終了または警告終了した場合,ジョブは「正常終了」または「警告検出終了」状態になります。
なお,最大リトライ回数で設定した回数まで実行しても,ジョブに指定した実行ファイルが正常終了または警告終了しない場合は,ジョブは「異常検出終了」状態になります。
ジョブが「正常終了」,「警告検出終了」,または「異常検出終了」状態になると,リトライ状態は「リトライ終了」になります。
リトライ実行回数
リトライ実行した回数です。
リトライ実行回数がカウントされるタイミングを,次の図に示します。

図2-101 リトライ実行回数のカウント

[図データ]
リトライ登録日時
リトライ実行して,ジョブが「実行待ち」状態になった日時です。
リトライ登録日時は,ジョブに指定した実行ファイルが異常終了して「先行終了待ち」状態になるといったんクリアされ,「実行待ち」状態になるとその日時に更新されます。複数回リトライ実行された場合は,最後にジョブが「実行待ち」状態になった日時に更新されます。
リトライ登録日時が更新されるタイミングを,次の図に示します。

図2-102 リトライ登録日時の更新

[図データ]
リトライ開始日時
リトライ実行して,ジョブが「実行中」状態になった日時です。
リトライ開始日時は,ジョブに指定した実行ファイルが異常終了して「先行終了待ち」状態になるといったんクリアされ,「実行中」状態になるとその日時に更新されます。複数回リトライ実行された場合は,最後にジョブが「実行中」状態になった日時に更新されます。
リトライ開始日時が更新されるタイミングを,次の図に示します。

図2-103 リトライ開始日時の更新

[図データ]

リトライ情報は,JP1/AJS3 - Viewの画面およびコマンドで確認できます。確認できるJP1/AJS3 - Viewの画面およびコマンドと,確認できるリトライ情報を次に示します。

表2-34 リトライ情報を確認できるJP1/AJS3 - Viewの画面およびコマンド

項番 確認できるJP1/AJS3 - Viewの画面およびコマンド 確認できるリトライ情報
1
  • [モニタ詳細]ダイアログボックス
  • [詳細スケジュール]ダイアログボックス
  • ajsshowコマンド
すべてのリトライ情報
2
  • [デイリースケジュール]ウィンドウ
  • [マンスリースケジュール]ウィンドウ
  • [ジョブネットモニタ]ウィンドウ

  • リトライ状態
  • リトライ実行回数
3 [検索]ウィンドウ リトライ実行回数

複数回リトライ実行された場合,JP1/AJS3 - Viewの画面およびajsshowコマンドで確認できるのは,最後のリトライ実行の結果です。リトライ実行ごとの結果を知りたい場合は,JP1イベント,スケジューラーログ,または[実行結果詳細]ダイアログボックスで確認してください。

(2) リトライ設定のあるジョブの監視

ここでは,リトライ設定のあるジョブの,打ち切り時間および終了遅延監視について説明します。

(a) リトライ中の打ち切り時間

打ち切り時間とリトライ設定の両方を設定した場合,打ち切り時間を監視するための経過時間は,リトライ実行ごとにカウントし直されます。

複数回のリトライ実行を含む,ジョブ全体の経過時間を監視したい場合は,ジョブネットの実行所要時間による終了遅延監視で監視してください。

リトライ中の打ち切り時間の監視を,次の図に示します。

図2-104 リトライ中の打ち切り時間監視

[図データ]

この例では,1回目のリトライ実行中に,ジョブの実行開始から20分が経過しています。しかし,打ち切り時間を監視するための経過時間は,リトライ実行開始時点からカウントし直されるため,「強制終了」状態にはなりません。2回目のリトライ実行中にリトライ実行開始から20分が経過すると,「強制終了」状態になります。

なお,打ち切り時間が経過してジョブが「強制終了」状態になった場合,最大リトライ回数に達していなくても,それ以降はリトライ実行しません。

(b) リトライ中の終了遅延監視

終了遅延監視とリトライ設定の両方を設定した場合,終了遅延を監視するための経過時間はリトライ実行ごとにカウントし直されます。

複数回のリトライ実行を含む,ジョブ全体の経過時間を監視したい場合は,ジョブネットの実行所要時間による終了遅延監視で監視してください。

リトライ中の終了遅延監視を,次の図に示します。

図2-105 リトライ中の終了遅延監視

[図データ]

この例では,1回目のリトライ実行中に,ジョブの実行開始から20分が経過しています。しかし,終了遅延を監視するための経過時間は,リトライ実行開始時点からカウントし直されるため,終了遅延は「あり」にはなりません。2回目のリトライ実行中にリトライ実行開始から20分が経過すると,終了遅延が「あり」になります。終了遅延が「あり」になったあとにリトライ実行されると,終了遅延は「なし」になります。

最後のリトライ実行の結果,終了遅延が「あり」だった場合,ジョブが終了したあとも遅延情報が表示されます。

注意事項
終了遅延が「あり」になったジョブが,次のリトライ実行の実行によって終了遅延が「なし」になっても,上位ジョブネットは「ネスト終了遅延」状態になります。

(3) リトライ設定のあるジョブの実行シミュレーション

リトライ設定のあるジョブを実行シミュレーションする場合,自動リトライによるリトライ待ちの時間や,リトライ実行の時間を含めてシミュレーションされます。

リトライ設定のあるジョブを実行シミュレーションした例を,次の図に示します。

図2-106 リトライ設定のあるジョブの実行シミュレーション

[図データ]

この例では,ジョブの実行時間を「20分」とします。ジョブ定義時には,最大リトライ回数に「4回」,リトライ間隔に「5分」を指定しています。この場合のシミュレーション結果は,最初のジョブ実行時間,4回分のリトライ実行の実行時間,およびそれぞれのリトライ実行前のリトライ間隔をすべて合計した120分です。

(4) リトライ設定のあるユニットの操作

リトライ設定のあるジョブ,リトライ設定のあるジョブの先行ユニット,またはリトライ設定のあるジョブの上位ユニットに対しての操作について説明します。

(a) リトライ設定のあるジョブまたは先行ユニットの再実行

自動リトライが終了したジョブを再実行した場合,リトライ中に先行ジョブから再実行した場合,およびリトライ中に先行ユニットだけを再実行した場合の動作について説明します。

●自動リトライが終了したジョブを再実行した場合の動作

自動リトライが終了したジョブを再実行すると,再実行した時点でリトライ実行回数がリセットされます。

自動リトライが終了したジョブを再実行した場合の動作を,次の図に示します。

図2-107 自動リトライが終了したジョブの再実行

[図データ]

ジョブが再実行されると,リトライ実行回数は「0」になります。

●リトライ中に先行ユニットから再実行した場合の動作

リトライ中に先行ユニットから再実行すると,実行回数がリセットされ,リトライ中のジョブは「先行終了待ち」状態に遷移して先行ユニットの終了を待ちます。

リトライ中のジョブが「先行終了待ち」状態で先行ユニットの終了を待つタイミングは,先行ユニットを再実行した時点での,リトライ中のジョブの状態によって異なります。

リトライ中に先行ユニットから再実行したときの動作を説明します。

リトライ中のジョブが「先行終了待ち」または「保留中」状態の場合
リトライ中のジョブは,先行ユニットを再実行した時点で「先行終了待ち」状態になり,先行ユニットが終了するのを待ちます。先行ユニットが終了したら,リトライ実行回数はリセットされ,再度ジョブが実行されます。
リトライ中のジョブが「先行終了待ち」状態の場合に,先行ユニットから再実行したときの動作を次の図に示します。

図2-108 リトライ中のジョブが「先行終了待ち」状態の場合に先行ユニットから再実行したときの動作

[図データ]
先行ユニットが再実行されると,リトライ実行回数は「0」になります。
リトライ中のジョブが「実行待ち」,「キューイング」,または「実行中」状態の場合
実行中のリトライ実行は最後まで実行され,ジョブが正常終了したかどうかに関係なく,リトライ実行が終了した時点でジョブは「先行終了待ち」状態になります。そのあと,先行ユニットが終了したら,リトライ実行回数はリセットされ,再度ジョブが実行されます。
リトライ中のジョブが「実行中」状態の場合に,先行ユニットから再実行したときの動作を次の図に示します。

図2-109 リトライ中のジョブが「実行中」状態の場合に先行ユニットから再実行したときの動作

[図データ]
先行ユニットが再実行されると,リトライ実行回数は「0」になります。
●リトライ中に先行ユニットだけ再実行した場合の動作

リトライ中に先行ユニットだけを再実行すると,リトライ実行が終了してから「先行終了待ち」状態に遷移してリトライ間隔が経過するのを待ちます。リトライ間隔が経過しても先行ユニットが終了していないときは,先行ユニットの終了を待ち,そのあとリトライ実行回数に達するまでリトライ実行されます。

リトライ中に先行ユニットだけ再実行したときの動作を説明します。

リトライ中のジョブが「先行終了待ち」または「保留中」状態の場合
リトライ中のジョブは,リトライ間隔が経過したら先行ユニットが終了するのを待ちます。そのあと,先行ユニットが終了したらリトライ実行されます。
リトライ中のジョブが「先行終了待ち」状態の場合に,先行ユニットだけ再実行したときの動作を次の図に示します。

図2-110 リトライ中のジョブが「先行終了待ち」状態の場合に先行ユニットだけ再実行したときの動作

[図データ]
リトライ中のジョブが「実行待ち」,「キューイング」,または「実行中」状態の場合
実行中のリトライ実行は最後まで実行されます。実行中のリトライ実行で実行ファイルが異常終了すると,リトライ間隔が経過してから先行ユニットが終了するのを待ちます。そのあと,先行ユニットが終了したらリトライ実行されます。
リトライ中のジョブが「実行中」状態の場合に,先行ユニットだけ再実行したときの動作を次の図に示します。

図2-111 リトライ中のジョブが「実行中」状態の場合に先行ユニットだけ再実行したときの動作

[図データ]
(b) リトライ中のサスペンド

リトライ中のジョブを含むルートジョブネットは,サスペンド状態にしたり,サスペンド状態を解除したりできます。

サスペンド中は,ジョブが異常終了してもリトライ実行されません。サスペンドを解除すると,リトライ間隔に設定した時間を待ってからリトライ実行されます。

サスペンド操作の詳細については,マニュアル「JP1/Automatic Job Management System 3 導入ガイド 4.5.17 ジョブネットの実行登録を解除しないでジョブネットやジョブの定義を変更する」を参照してください。

(c) リトライ中のジョブを含むルートジョブネットの中断

リトライ中のジョブを含むルートジョブネットを中断した場合,ルートジョブネットは「中断」状態に,リトライ設定のあるジョブは「未実行終了」状態になります。

リトライ中のジョブが「未実行終了」状態になるタイミングは,リトライ中のジョブの状態によって異なります。

ルートジョブネットを中断した場合の,リトライ中のジョブの動作を次に示します。

リトライ中のジョブが「先行終了待ち」または「保留中」状態の場合
予定されていたリトライ実行はされないまま,ジョブは「未実行終了」状態に,リトライ状態は「リトライ終了」になります。
リトライ中のジョブが「先行終了待ち」状態の場合に,ルートジョブネットを中断したときの動作を,次の図に示します。

図2-112 リトライ中のジョブが「先行終了待ち」状態の場合にルートジョブネットを中断したときの動作

[図データ]
リトライ中のジョブが「実行待ち」,「キューイング」,または「実行中」状態の場合
実行中のリトライ実行は最後まで実行されます。ジョブが正常終了したかどうかに関係なく,終了したジョブは「未実行終了」状態に,リトライ状態は「リトライ終了」になります。
リトライ中のジョブが「実行中」状態の場合に,ルートジョブネットを中断したときの動作を,次の図に示します。

図2-113 リトライ中のジョブが「実行中」の場合にルートジョブネットを中断したときの動作

[図データ]

リトライ中のジョブを含むルートジョブネットを中断すると,ジョブに定義した実行ファイルのエラーが解消されないまま,ジョブは「未実行終了」状態に,リトライ状態は「リトライ終了」になります。

(d) リトライ中の状態変更または強制終了

自動リトライによって,状態が「実行中」,「キューイング」,または「実行待ち」(実行先サービスがキューレスに設定されているジョブの場合)になったジョブを状態変更で終了状態にしたり,すでに終了状態のジョブを任意の終了状態に変更したりできます。また,強制終了することもできます。状態変更または強制終了した場合,状態変更後の終了状態や終了コードに関係なく,終了状態になったジョブは自動リトライされません。

(e) リトライ中のジョブ定義内容変更

リトライ中にジョブの定義内容を変更した場合,環境設定パラメーターUNITDEFINERELOADに「yes」を設定していると,リトライ実行のたびにジョブの定義が再読み込みされます。そのため,リトライ中にジョブの定義を変更すると,変更後に実行されるリトライ実行から,新しい定義内容が有効になります。

定義内容を変更したときの動作については,マニュアル「JP1/Automatic Job Management System 3 運用ガイド 8.4 実行登録中にユニット定義情報を変更する」を参照してください。

なお,リトライ状態が「リトライ待ち」のときにリトライ設定を削除した場合,一回だけリトライ実行します。リトライ実行が終了したら,それ以降はリトライ実行しません。

注意事項
リトライ中にジョブの定義内容を変更すると,定義を変更した時点のジョブ状態によって,その後の動作が変わります。意図しない動作をすることがありますので,リトライ中には定義変更しないことを推奨します。
(f) リトライ中の待ち合わせ

リトライ設定のあるジョブに待ち合わせ条件を設定している場合,一度待ち合わせ状態が「完了」になれば,リトライ実行のときには待ち合わせません。リトライ状態が「リトライ待ち」になる前に,待ち合わせ条件を有効にして待ち合わせ状態を「未完了(手動)」に変更しても,待ち合わせ条件の成立を待たないですぐにリトライ間隔の経過を待ちます。

リトライ設定のあるジョブに待ち合わせ条件を設定した場合の動作を,次の図に示します。

図2-114 リトライ設定のあるジョブに待ち合わせ条件を設定した場合の動作

[図データ]

(5) リトライ実行によって更新される情報

リトライ実行されると,リトライ情報以外にも更新される情報があります。ジョブ実行中にリトライ実行で更新される情報を参照する場合,参照するタイミングによって参照結果が異なることがあるので,影響を考慮してジョブを定義してください。

リトライ実行によって更新される情報を,次に示します。

表2-35 リトライ実行によって更新される情報一覧

項番 更新情報 更新内容
1 環境変数JP1JobID リトライ実行時のジョブIDに更新されます。
2 標準出力ファイル
ジョブの詳細定義で[追加書き]を指定していない場合
リトライ実行のたびに,ファイルの内容が上書きされます。
ジョブの詳細定義で[追加書き]を指定している場合
リトライ実行のたびに,ファイルに追加書きされます。
3 標準エラー出力ファイル
ジョブの詳細定義で[追加書き]を指定していない場合
リトライ実行のたびに,ファイルの内容が上書きされます。
ジョブの詳細定義で[追加書き]を指定している場合
リトライ実行のたびに,ファイルに追加書きされます。
4 転送ファイル リトライ実行のたびに,ファイルは転送されます。
5 実行結果詳細 リトライ実行のたびに,追加書きされます。
注意事項
標準出力ファイルおよび標準エラー出力ファイルは,[追加書き]を指定すると,ファイルのサイズが大きくなり高い負荷が掛かります。そのため,[追加書き]を指定しないことを推奨します。[追加書き]を指定する場合は,出力情報を少なくしたり,定期的にファイルをクリアしたりして運用してください。

(6) リトライ中のスケジューラーサービスの再起動

スケジューラーサービスを停止して再起動した場合,スケジューラーサービスの起動モードに応じて,リトライ中のジョブも通常のジョブと同様の状態になります。ただし,次の点が異なります。

起動モード別のジョブの状態については,マニュアル「JP1/Automatic Job Management System 3 運用ガイド 7.2.1 JP1/AJS3起動時の動作を一時的に変更する」を参照してください。

(7) 自動リトライに関する注意事項

自動リトライを使用する場合の注意事項を,次に示します。