2.4.10 ジョブの異常終了時に自動でリトライする
ジョブに定義した実行ファイルが異常終了した場合に,ジョブをリトライすることで一時的なエラーを回復できることがあります。リトライによって回復できるジョブには,ジョブの異常終了時に自動的にジョブをリトライさせるように定義することで,実行ファイルに一時的なエラーが発生しても業務を継続できます。
ジョブに指定した実行ファイルが異常終了したときに,自動的にリトライすることを自動リトライといい,自動リトライによってジョブを実行することをリトライ実行といいます。
自動リトライした場合の,ジョブの動作を次の図に示します。
自動リトライする場合,ジョブに定義した実行ファイルが異常終了しても,ジョブは「異常検出終了」状態になりません。一定の間隔を待ってから,ジョブが自動リトライされます。
- 〈この項の構成〉
(1) 自動リトライの概要
自動リトライの概要について説明します。
(a) 自動リトライの条件
次の条件を満たすジョブの実行ファイルがエラーになった場合,ジョブは「異常検出終了」状態にならないで,自動リトライします。
-
[終了判定]に[しきい値による判定]を指定している。
-
[異常終了時リトライ]に[する]を指定している。
[異常終了時リトライ]を指定できるのは,次のジョブです。
-
UNIXジョブ
-
PCジョブ
-
QUEUEジョブ
-
標準カスタムジョブ
-
カスタムPCジョブ
-
カスタムUNIXジョブ
-
オペレーションジョブ
-
- 注意事項
-
自動リトライに関する設定は,JP1/AJS3 - ViewおよびJP1/AJS3 - Managerのバージョンが10-00以降の場合に使用できます。ただし,10-00以降のJP1/AJS3 - Managerを使用していても,データベース構成が互換用ISAM構成の場合は使用できません。
(b) 自動リトライの実行方法に関する設定
自動リトライの実行方法に関する設定を,リトライ設定と呼びます。
リトライ設定の各項目について,次に示します。
項番 |
設定項目 |
設定内容 |
---|---|---|
1 |
異常終了時リトライ |
ジョブに指定した実行ファイルがエラーになったときに,自動リトライするかどうかを指定します。 |
2 |
終了コード |
リトライ実行する終了コードの範囲を指定します。 |
3 |
最大リトライ回数 |
リトライ実行する最大回数を指定します。 |
4 |
リトライ間隔 |
ジョブの実行ファイルがエラーになってから,リトライ実行するまでの間隔を指定します。 |
- 注意事項
-
終了コードは,必要最低限の範囲を設定してください。自動リトライする終了コードの範囲を必要以上に広く設定すると,リトライ実行しても回復する見込みのない終了コードもリトライ実行し,ジョブの実行数が増加してジョブ実行性能に影響を与えるおそれがあります。
リトライ設定をしているジョブが異常終了したときの動作を,次の図に示します。
リトライ設定をしているジョブに指定した実行ファイルが異常終了すると,リトライ間隔で設定した時間が経過してから,リトライ実行されます。リトライ実行は,ジョブが正常終了または警告終了するか,もしくはリトライ実行回数が最大リトライ回数に達するまで繰り返されます。
リトライ設定の内容は,JP1/AJS3 - Viewの画面およびコマンドで確認できます。確認できる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の画面およびコマンドと,確認できるリトライ情報を次に示します。
項番 |
確認できるJP1/AJS3 - Viewの画面およびコマンド |
確認できるリトライ情報 |
---|---|---|
1 |
|
すべてのリトライ情報 |
2 |
|
|
3 |
[検索]ウィンドウ |
リトライ実行回数 |
複数回リトライ実行された場合,JP1/AJS3 - Viewの画面およびajsshowコマンドで確認できるのは,最後のリトライ実行の結果です。リトライ実行ごとの結果を知りたい場合は,JP1イベント,スケジューラーログ,または[実行結果詳細]ダイアログボックスで確認してください。
(2) リトライ設定のあるジョブの監視
ここでは,リトライ設定のあるジョブの,打ち切り時間および終了遅延監視について説明します。
(a) リトライ中の打ち切り時間
打ち切り時間とリトライ設定の両方を設定した場合,打ち切り時間を監視するための経過時間は,リトライ実行ごとにカウントし直されます。
複数回のリトライ実行を含む,ジョブ全体の経過時間を監視したい場合は,ジョブネットの実行所要時間による終了遅延監視で監視してください。
リトライ中の打ち切り時間の監視を,次の図に示します。
この例では,1回目のリトライ実行中に,ジョブの実行開始から20分が経過しています。しかし,打ち切り時間を監視するための経過時間は,リトライ実行開始時点からカウントし直されるため,「強制終了」状態にはなりません。2回目のリトライ実行中にリトライ実行開始から20分が経過すると,「強制終了」状態になります。
なお,打ち切り時間が経過してジョブが「強制終了」状態になった場合,最大リトライ回数に達していなくても,それ以降はリトライ実行しません。
(b) リトライ中の終了遅延監視
終了遅延監視とリトライ設定の両方を設定した場合,終了遅延を監視するための経過時間はリトライ実行ごとにカウントし直されます。
複数回のリトライ実行を含む,ジョブ全体の経過時間を監視したい場合は,ジョブネットの実行所要時間による終了遅延監視で監視してください。
リトライ中の終了遅延監視を,次の図に示します。
この例では,1回目のリトライ実行中に,ジョブの実行開始から20分が経過しています。しかし,終了遅延を監視するための経過時間は,リトライ実行開始時点からカウントし直されるため,終了遅延は「あり」にはなりません。2回目のリトライ実行中にリトライ実行開始から20分が経過すると,終了遅延が「あり」になります。終了遅延が「あり」になったあとにリトライ実行されると,終了遅延は「なし」になります。
最後のリトライ実行の結果,終了遅延が「あり」だった場合,ジョブが終了したあとも遅延情報が表示されます。
- 注意事項
-
終了遅延が「あり」になったジョブが,次のリトライ実行の実行によって終了遅延が「なし」になっても,上位ジョブネットは「ネスト終了遅延」状態になります。
(3) リトライ設定のあるジョブの実行シミュレーション
リトライ設定のあるジョブを実行シミュレーションする場合,自動リトライによるリトライ待ちの時間や,リトライ実行の時間を含めてシミュレーションされます。
リトライ設定のあるジョブを実行シミュレーションした例を,次の図に示します。
この例では,ジョブの実行時間を「20分」とします。ジョブ定義時には,最大リトライ回数に「4回」,リトライ間隔に「5分」を指定しています。この場合のシミュレーション結果は,最初のジョブ実行時間,4回分のリトライ実行の実行時間,およびそれぞれのリトライ実行前のリトライ間隔をすべて合計した120分です。
(4) リトライ設定のあるユニットの操作
リトライ設定のあるジョブ,リトライ設定のあるジョブの先行ユニット,またはリトライ設定のあるジョブの上位ユニットに対しての操作について説明します。
(a) リトライ設定のあるジョブまたは先行ユニットの再実行
自動リトライが終了したジョブを再実行した場合,リトライ中に先行ジョブから再実行した場合,およびリトライ中に先行ユニットだけを再実行した場合の動作について説明します。
■ 自動リトライが終了したジョブを再実行した場合の動作
自動リトライが終了したジョブを再実行すると,再実行した時点でリトライ実行回数がリセットされます。
自動リトライが終了したジョブを再実行した場合の動作を,次の図に示します。
ジョブが再実行されると,リトライ実行回数は「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) リトライ中の待ち合わせ
リトライ設定のあるジョブに待ち合わせ条件を設定している場合,一度待ち合わせ状態が「完了」になれば,リトライ実行のときには待ち合わせません。リトライ状態が「リトライ待ち」になる前に,待ち合わせ条件を有効にして待ち合わせ状態を「未完了(手動)」に変更しても,待ち合わせ条件の成立を待たないですぐにリトライ間隔の経過を待ちます。
リトライ設定のあるジョブに待ち合わせ条件を設定した場合の動作を,次の図に示します。
(5) リトライ実行によって更新される情報
リトライ実行されると,リトライ情報以外にも更新される情報があります。ジョブ実行中にリトライ実行で更新される情報を参照する場合,参照するタイミングによって参照結果が異なることがあるので,影響を考慮してジョブを定義してください。
リトライ実行によって更新される情報を,次に示します。
項番 |
更新情報 |
更新内容 |
---|---|---|
1 |
環境変数JP1JobID |
リトライ実行時のジョブIDに更新されます。 |
2 |
標準出力ファイル |
|
3 |
標準エラー出力ファイル |
|
4 |
転送ファイル |
リトライ実行のたびに,ファイルは転送されます。 |
5 |
実行結果詳細 |
リトライ実行のたびに,追加書きされます。 |
- 注意事項
-
標準出力ファイルおよび標準エラー出力ファイルは,[追加書き]を指定すると,ファイルのサイズが大きくなり高い負荷が掛かります。そのため,[追加書き]を指定しないことを推奨します。[追加書き]を指定する場合は,出力情報を少なくしたり,定期的にファイルをクリアしたりして運用してください。
(6) リトライ中のスケジューラーサービスの再起動
スケジューラーサービスを停止して再起動した場合,スケジューラーサービスの起動モードに応じて,リトライ中のジョブも通常のジョブと同様の状態になります。ただし,次の点が異なります。
-
ウォームスタートまたはディザスターリカバリースタートでスケジューラーサービスを起動した場合
自動リトライを継続しません。起動モードごとのジョブ状態に従って終了状態になります。
-
ホットスタートでスケジューラーサービスを起動した場合
自動リトライを継続します。リトライ間隔およびリトライ実行回数は,次のように扱われます。
- リトライ間隔
-
スケジューラーサービスが停止している期間も,リトライ間隔の経過時間に含みます。例えば,5分間隔でリトライ実行するジョブの場合,「リトライ待ち」になってから2分経過した時点で2分間スケジューラーサービスを停止してホットスタートで再起動すると,再起動してから1分後にリトライ実行を開始します。
図2‒115 ホットスタートでスケジューラーサービスを起動した場合の動作 なお,JP1/AJS3サービスまたはスケジューラーサービスを,リトライ間隔以上の時間停止させてからホットスタートで再起動した場合,スケジューラーサービスの起動と同時にジョブが実行を開始します。そのため,一時的にジョブ量が増えて,ジョブ実行性能が一時的に低下するおそれがあります。
- リトライ実行回数
-
リトライ実行回数は,初期化されません。リトライ実行回数を継続して,リトライ実行します。例えば,最大リトライ回数に「5回」を指定しているジョブの場合,リトライ実行が2回終了した時点でスケジューラーサービスを再起動すると,再起動後,最大で残りの3回分のリトライを実行します。
起動モード別のジョブの状態については,マニュアル「JP1/Automatic Job Management System 3 運用ガイド 7.2.1 JP1/AJS3起動時の動作を一時的に変更する」を参照してください。
(7) 自動リトライに関する注意事項
自動リトライを使用する場合の注意事項を,次に示します。
-
リモートジョブネット配下のユニットにリトライ設定をした場合で,リモートジョブネットの実行先マネージャーが次のどちらかに該当するとき,エラーになります。
-
データベース構成が互換用ISAM構成
-
JP1/AJS3 - Managerのバージョンが09-50以前
-
-
スケジューラーサービスのジョブ制限停止中およびジョブ強制終了停止中は,自動リトライは行いません。ジョブは終了コードやリトライ実行回数に関係なく,リトライ実行しないで終了状態になります。実行中のジョブがなくなれば,スケジューラーサービスは停止します。
スケジューラーサービスの制限停止については,マニュアル「JP1/Automatic Job Management System 3 運用ガイド 8.5.2 スケジューラーサービスを停止する」を参照してください。
-
ユーザーアプリケーションではなく,OSが終了コードを設定してジョブが終了する場合があります。その場合,自動リトライの対象になるため注意してください。
-
キューレスジョブでは,スクリプトファイルがない場合やアクセスできない場合も,自動リトライの対象となります。定義内容の事前チェック機能で,スクリプトファイルにアクセスできることを確認してください。
-
キューレスジョブを実行する場合,バージョンが10-00以降のJP1/AJS3 - ManagerまたはJP1/AJS3 - Agentで実行してください。バージョンが09-50以前だと,何らかの要因でジョブプロセス起動用プロセスが異常終了した場合も,自動リトライの対象となります。