こんにちは!JP1/AJSのジョブ設計や運用保守、日々お疲れ様です。
JP1のジョブ運用で、「このコマンド(スクリプト)は時々エラーコードを返すけれど、後続の処理は止めずに進めたい」という場面はありませんか?
そんなときに便利なのが、ジョブの「判定結果」設定を 「常に正常」 に変更する機能です。
しかし、ここで一つ疑問が浮かびます。 「常に正常」と判定されたとき、そのジョブの最終的な『終了コード』は本来のエラーコードのままなのか、それとも『0(正常)』に上書きされるのか?
今回は、この挙動の結論と、その際にJP1が出力するログメッセージ(KAVS〜)について解説します!
1. 【結論】終了コードは「正常(0)」として扱われる
結論から言うと、ジョブの判定結果を「常に正常」に設定した場合、OSのコマンドやスクリプトが内部でどんなエラーコード(例: 1 や 255)を返していたとしても、JP1上の終了コードは一律で「正常の終了コード(通常は 0)」として処理されます。
そのため、後続のジョブやジョブネットは「前のジョブが正常に終わった」と認識し、何事もなかったかのようにスムーズに実行されます。
2. ログには形跡が残る!出力される2つの重要メッセージ
「常に正常」にすると画面上は綺麗な緑色(正常終了)になりますが、「本当にコマンド自体は成功していたのか?」を後から調査したい時もありますよね。
JP1は優秀なので、スケジューラーサービスのログ( syslog や実行履歴ログ)に、「本来は異常コードだったけど、設定通り正常扱いにしたよ」という形跡をちゃんと残してくれます。
その際に出力されるのが、以下の2つのインフォメーションメッセージ(-I)です。
① KAVS0264-I
-
メッセージのメッセージテキスト例:
KAVS0264-I ジョブ(ジョブ名)は,終了コード(本来のコード)で終了しましたが,判定結果が「常に正常」のため,正常終了とします。 -
解説: このメッセージを見れば、本来そのジョブが内部で何番の終了コードを返していたのか(本来のエラー原因)をピンポイントで特定することができます。
② KAVS0261-I
-
メッセージのメッセージテキスト例:
KAVS0261-I ジョブ(ジョブ名)は正常終了しました(終了コード:0)。 -
解説: 最終的にJP1がこのジョブを「終了コード 0」として着地させたことを示すログです。
3. 運用設計時の注意点
「常に正常」は非常に便利な機能ですが、使いどころには注意が必要です。
-
本当の異常を見逃すリスクがある ディスクフルや権限エラーなど、「本当に処理が失敗してデータが壊れているケース」であってもジョブネットが先に進んでしまいます。
-
基本はスクリプト側での制御がおすすめ 可能であれば、JP1の機能に頼るよりも、バッチファイルやシェルスクリプト側で
try-catchやif文を使い、「許容できるエラーのときだけexit 0を返す」という実装にした方が、後からのメンテナンスやログの可読性が高くなります。
まとめ
-
判定結果を「常に正常」にすると、終了コードは正常(0)になる。
-
後続ジョブは問題なく実行される。
-
本来の終了コードを知りたい時は、ログから
KAVS0264-Iを探せば一発でわかる。
一時的なメンテナンスや、どうしてもエラーハンドリングが難しいレガシーなプログラムを組み込む際の頼れる機能です。挙動を正しく理解して、安全なジョブ設計に役立ててくださいね!
