2.6.15 ジョブを続行できないエラーが発生したときの終了コードを定義する
メモリ不足やジョブ定義スクリプトの解析エラーなど,ジョブの実行を継続できないエラーによってジョブが終了した場合,ジョブコントローラの終了コードは1となります。しかし,環境変数ADSH_JOBRC_FATALに値を設定しておくことで,この場合の終了コードを1〜255に変更できます。
環境変数ADSH_JOBRC_FATALの設定方法については,「(2) 環境変数ADSH_JOBRC_FATAL(ジョブ続行不可エラー発生時の終了コードを設定する)」の説明を参照してください。
(1) 環境変数ADSH_JOBRC_FATALの適用可否
ジョブコントローラの動作中に発生するエラーの種類と,それに対する環境変数ADSH_JOBRC_FATALでの終了コード定義の適用可否を次の表に示します。
項番 |
エラーの発生時期 |
エラーの種類 |
適用可否※1 |
---|---|---|---|
1 |
adshexecコマンドでのジョブ起動時, またはエディタからのジョブ定義スクリプトのデバッグ実行時 |
OSがadshexecコマンドの実行を開始できないエラーです。 例えば,adshexecコマンドが使用するロードモジュールが存在しないエラーが該当します。 |
× |
2 |
ジョブ定義スクリプトの実行前 |
環境変数ADSH_JOBRC_FATALの解析エラーです。 |
×※2 |
3 |
イベントファイルの初期化エラーです。 |
× |
|
4 |
【UNIX限定】シグナル受信によるエラーです。 |
×※3 |
|
5 |
【Windows限定】TerminateProcessなどによって,次に示すどれかのプロセスを即時終了したことによるエラーです。
|
× |
|
6 |
項番2〜項番5以外で発生するすべてのエラーです。代表的なエラーは次のとおりです。
|
○ |
|
7 |
ジョブ定義スクリプトの実行中 |
ジョブ定義スクリプトの処理を続行するエラーです。※4 |
× |
8 |
デバッグ実行中に,次に示すデバッガのコマンドやメニュー,ボタンを使用してジョブを途中で終了させたことによるエラーです。
|
× |
|
9 |
【UNIX限定】シグナル受信によるエラーです。 |
×※3 |
|
10 |
【Windows限定】TerminateProcessなどによって,次に示すどれかのプロセスを即時終了したことによるエラーです。
|
× |
|
11 |
項番7〜項番10以外で発生するすべてのエラーです。代表的なエラーを次に示します。
|
○ |
|
12 |
ジョブ定義スクリプトの実行後 |
【UNIX限定】シグナル受信によるエラーです。 |
×※3 |
13 |
ファイルやディレクトリに関する,次に示すエラーです。
|
× |
|
14 |
【Windows限定】TerminateProcessなどによって,次に示すどれかのプロセスを即時終了したことによるエラーです。
|
× |
|
15 |
項番12〜項番14以外で発生するすべてのエラーです。代表的なエラーを次に示します。
|
○ |
- (凡例)
○:環境変数ADSH_JOBRC_FATALの設定が適用されます。
×:環境変数ADSH_JOBRC_FATALの設定が適用されません。
- 注※1
環境変数ADSH_JOBRC_FATALの設定の適用可否は,adshexecコマンドで指定したオプションには左右されません。例えば,adshexecコマンドに-cオプションを指定して実行し,文法エラーが発生した場合にも適用されます。
適用可否はOSによって次のように異なります。
UNIX版でadshexecコマンドに-dオプションを指定した場合
デバッガと,runコマンドで実行したデバッグ対象のジョブとで,この表の次に示す項番が適用可否の判定対象となります。
デバッガ:項番1〜項番6,項番12〜項番15
デバッグ対象のジョブ:項番7〜項番15
Windows版でエディタからデバッグを実行した場合
デバッグ対象のジョブに対して,この表の項番1〜項番15が適用可否の判定対象となります。
- 注※2
終了コードは255になります。
- 注※3
ジョブコントローラがシグナルを受信してエラー終了した場合のジョブの終了コードは「128+シグナル番号」になります。
- 注※4
ジョブ定義スクリプトの実行中にスクリプト拡張コマンドがエラーとなった場合,次に示す後続のジョブステップとコマンドは実行されませんが,続行できないエラーとは見なされません。そのため,環境変数ADSH_JOBRC_FATALの設定は適用されません。
run属性が省略またはnormalのジョブステップ
ジョブステップ外の命令
- 注※5
正規組み込みコマンドの引数に代入演算を指定した場合は除きます。
代入演算の指定分類と環境変数ADSH_JOBRC_FATALの設定の適用可否を次の表に示します。この表ではエラーとなる例として,「readonly NUM」で読み込み専用として定義されている変数NUMに対し,値を代入しようとしてエラーとなるケースを使用しています。
代入演算の指定分類
エラーとなる例
適用可否
代入演算をそのまま指定した場合
NUM=100
○
代入演算をスクリプト予約語コマンドの引数に指定した場合
time NUM=100
○
代入演算を特殊組み込みコマンドの引数に指定した場合
export NUM=100
○
代入演算を正規組み込みコマンドの引数に指定した場合
let NUM=100
×
- (凡例)
○:環境変数ADSH_JOBRC_FATALの設定が適用されます。
×:環境変数ADSH_JOBRC_FATALの設定が適用されません。
- 注※6
変数置換の結果,変数の状態によってはジョブが続行できないためエラー終了する場合があります。エラーとなる変数の状態を書式ごとに次に示します。
- ${variable:?[word]}
variableが定義済みで値がNULL(空文字列)の場合,またはvariableが未定義の場合,エラーとなります。
- ${variable?[word]}
variableが未定義の場合,エラーとなります。
(2) 環境変数ADSH_JOBRC_FATAL(ジョブ続行不可エラー発生時の終了コードを設定する)
ジョブが続行できなくなってエラー終了した場合のジョブコントローラの終了コードを設定します。設定した終了コードは,adshexecコマンドまたはJP1/Advanced Shell - Developerのエディタから実行されたジョブに対して適用されます。
システム全体でこの環境変数の設定値を有効にする方法を次に示します。
Windowsの場合
システム環境変数として環境変数ADSH_JOBRC_FATALを定義する。
UNIX版の場合
/etc/profileに環境変数ADSH_JOBRC_FATALの設定処理を記述する。
この環境変数を設定しなかった場合,ジョブが続行できないエラーで終了した際のジョブコントローラの終了コードは1となります。
(a) 環境変数に設定できる値
- 終了コード 〜<符号なし整数>((1〜255))
ジョブ続行不可時の終了コードを指定します。前の桁を0で埋めて「001」のように指定した場合は,上位のゼロを削除して「1」と扱います。
(b) 注意事項
環境ファイルのexportパラメーターを使用して環境変数ADSH_JOBRC_FATALを定義した場合や,シェル変数ENVに指定したファイル内およびジョブ定義スクリプト内で環境変数ADSH_JOBRC_FATALの定義・変更をした場合,そのジョブ内ではこの機能は有効になりません。ただし,そのジョブから起動した別のジョブで有効になります。
環境変数ADSH_JOBRC_FATALはジョブの最終的な終了コードを定義します。各コマンドやジョブステップの終了コードには影響しません。
次の値が設定された場合,ジョブは実行されないで終了コード255でエラー終了します。
4文字以上の値(例:1234)
指定範囲外の値(例:500)
数値以外の文字(例:1A4,+8,8.0)
0文字の値(空文字列)
エラー発生時に環境変数ADSH_JOBRC_FATALを適用するかどうかの判定は,ジョブごとに独立しています。そのため,ルートジョブや子孫ジョブの中だけでジョブの実行を継続できないエラーが発生した場合に,ほかのルートジョブや子孫ジョブに対して環境変数ADSH_JOBRC_FATALが適用されて終了コードが変更されることはありません。
(c) 使用例
UNIX版で環境変数ADSH_JOBRC_FATALに8を設定して起動したジョブが続行不可エラーで終了した場合の例を次に示します。
- 環境ファイルのSPOOL_DIRパラメーターに指定したディレクトリが存在しなかったため,ジョブを続行できなかった場合
- /etc/profileの記載内容
ADSH_JOBRC_FATAL=8 export ADSH_JOBRC_FATAL
- ジョブ起動時のコマンド指定内容
$ /opt/jp1as/bin/adshexec test.sh
この場合の実行結果を次に示します。
KNAX0441-E 環境ファイルのパラメーター("SPOOL_DIR")で指定したディレクトリは存在しません。line=1 KNAX0410-E 環境ファイル("sample.ase")の解析でエラーが発生しました。エラーの内容はこのメッセージの前に出力されているメッセージを参照してください。 KNAX0240-I 環境変数(ADSH_JOBRC_FATAL)の設定(8)が適用されました。 …1. KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=8 …2.
実行結果の1.と2.について次に説明します。
環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。
ジョブコントローラの終了コードとして,環境変数ADSH_JOBRC_FATALの設定値が適用されています。
- 特殊組み込みコマンド(unsetコマンド)のエラーで子孫ジョブが終了した場合
- /etc/profileの記載内容
ADSH_JOBRC_FATAL=8 export ADSH_JOBRC_FATAL
- 環境ファイルの内容
#-adsh_conf CHILDJOB_SHEBANG /bin/sh
- ルートジョブのジョブ定義スクリプト(prt.sh)の内容
./cld.sh ./cmdA
- 子孫ジョブのジョブ定義スクリプト(cld.sh)の内容
#!/bin/sh val=10 unset ./cmdX $val
- ジョブ起動時のコマンド指定内容
$ /opt/jp1as/bin/adshexec prt.sh
この場合の実行結果を次に示します。
******** ジョブコントローラのメッセージ出力 ******** 14:59:57 000040 KNAX0091-I ADSH000040 ジョブが開始しました。 14:59:57 000040 KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 14:59:57 000040 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 14:59:57 000040 KNAX6831-I CHILDJOB_SHEBANGパラメーターによる子孫ジョブ実行の読み替え規則に合致しました。script="./cld.sh" shebang="/bin/sh" >>>>>> [JOBLOG] /home/usr/cld.sh 14:59:57 000041 KNAX6571-I ADSH000041 子孫ジョブを開始しました。parent jobname=ADSH000040, parent jobid=000040 14:59:57 000041 KNAX6572-I 子孫ジョブ(ADSH000041)はジョブ環境ファイル("/opt/jp1as/conf/adsh.conf")を使用します。 14:59:57 000041 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 14:59:57 000041 KNAX6110-I コマンド(val=10, 行番号=2)が正常終了しました。rc=0 E-Time=0.000s C-Time=0.000s 14:59:57 000041 KNAX6015-E 引数が必要な組み込みコマンドに対して,引数を指定しないで実行しました。filename="/home/usr/cld.sh" line=3 14:59:57 000041 KNAX6521-E コマンド(unset, 行番号=3)がエラー終了しました。rc=1 E-Time=0.000s C-Time=0.000s 14:59:57 000041 KNAX6584-I ジョブ定義スクリプトの実行を停止するコマンドが実行されたため,バッチジョブの実行を中断しました。 14:59:57 000041 KNAX0101-E ADSH000041 ジョブを実行中にエラーが発生しました。 14:59:57 000041 KNAX6578-I ADSH000041 子孫ジョブが終了しました。rc=8 E-Time=0.001s C-Time=0.000s <<<<<< [JOBLOG] /home/usr/cld.sh 14:59:57 000040 KNAX6521-E コマンド(./cld.sh, 行番号=1)がエラー終了しました。rc=8 E-Time=0.012s C-Time=0.000s 14:59:57 000040 KNAX6116-I コマンド(./cmdA, 行番号=2)が正常終了しました。rc=0 E-Time=0.001s C-Time=0.000s 14:59:57 000040 KNAX0101-E ADSH000040 ジョブを実行中にエラーが発生しました。 14:59:57 000040 KNAX0098-I ADSH000040 ジョブが終了しました。rc=0 E-Time=0.016s C-Time=0.000s ******** ジョブ定義スクリプトの内容 ******** ***** /home/usr/prt.sh ***** 0001 : ./cld.sh 0002 : ./cmdA 0003 : ***** パス変換情報 ***** ***** /home/usr/cld.sh ***** 0001 : #!/bin/sh 0002 : val=10 0003 : unset 0004 : ./cmdX $val 0005 : ***** パス変換情報 ***** ******** 実行ジョブのSTDERRファイルの内容 ******** >>>>>> [STDERR] /home/usr/cld.sh KNAX0726-I 子孫ジョブのジョブ識別子を割り当てました。Jobid=000041 KNAX0101-E ADSH000041 ジョブを実行中にエラーが発生しました。 KNAX0240-I 環境変数(ADSH_JOBRC_FATAL)の設定(8)が適用されました。 <<<<<< [STDERR] /home/usr/cld.sh KNAX0101-E ADSH000040 ジョブを実行中にエラーが発生しました。 KNAX0098-I ADSH000040 ジョブが終了しました。rc=0 E-Time=0.016s C-Time=0.000s ******** ジョブステップの出力 ******** KNAX6380-I ルートジョブのスプールジョブディレクトリにジョブ名を付加します。spool job directory="/var/opt/jp1as/spool/000040-ADSH000040/" KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=0
実行結果の1.と2.について次に説明します。
子孫ジョブの終了コードとして,環境変数ADSH_JOBRC_FATALの設定値が適用されています。
子孫ジョブで環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。
Windows版でシステム環境変数ADSH_JOBRC_FATALに16を設定して起動したジョブが続行不可エラーで終了した場合の例を次に示します。
- 環境ファイルのLOG_DIRパラメーターに指定したディレクトリが存在しなかったため,ジョブの実行を継続できなかった場合
システム環境変数に次の変数と値を設定しておきます。
変数:ADSH_JOBRC_FATAL
値:16
- ジョブ起動時のコマンド指定内容
adshexec test.ash
この場合の実行結果を次に示します。
KNAX0441-E 環境ファイルのパラメーター("LOG_DIR")で指定したディレクトリは存在しません。line=1 KNAX0410-E 環境ファイル("sample.ase")の解析でエラーが発生しました。エラーの内容はこのメッセージの前に出力されているメッセージを 参照してください。 KNAX0240-I 環境変数(ADSH_JOBRC_FATAL)の設定(16)が適用されました。…1. KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=16 …2.
実行結果の1.と2.について次に説明します。
システム環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。
ジョブの終了コードとして,システム環境変数ADSH_JOBRC_FATALの設定値が適用されています。
- 特殊組み込みコマンド(unsetコマンド)のエラーで子孫ジョブが終了した場合
システム環境変数に次の変数と値を設定しておきます。
変数:ADSH_JOBRC_FATAL
値:16
- 環境ファイルの内容
#-adsh_conf CHILDJOB_SHEBANG /bin/sh
- ルートジョブのジョブ定義スクリプト(prt.sh)の内容
./cld.sh ./cmdA
- 子孫ジョブのジョブ定義スクリプト(cld.sh)の内容
#!/bin/sh val=10 unset ./cmdX $val
- ジョブ起動時のコマンド指定内容
adshexec prt.sh
この場合の実行結果を次に示します。
******** ジョブコントローラのメッセージ出力 ******** 17:36:17 000044 KNAX0091-I ADSH000044 ジョブが開始しました。 17:36:17 000044 KNAX7901-I ジョブコントローラは,ジョブ終了時にすべての非同期実行プロセスの完了を待ちます。 17:36:17 000044 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 17:36:17 000044 KNAX6832-I CHILDJOB_EXTパラメーターによる子孫ジョブ実行の読み替え規則に合致しました。script=".\cld.sh" >>>>>> [JOBLOG] d:\home\usr\cld.sh 17:36:17 000045 KNAX6571-I ADSH000045 子孫ジョブを開始しました。parent jobname=ADSH000044, parent jobid=000044 17:36:17 000045 KNAX6572-I 子孫ジョブ(ADSH000045)はジョブ環境ファイル("c:\jp1as\conf\adsh.conf")を使用します。 17:36:17 000045 KNAX7902-I ジョブコントローラは,"端末入力モード"で動作します。 17:36:17 000045 KNAX6110-I コマンド(val=10, 行番号=2)が正常終了しました。rc=0 E-Time=0.001s C-Time=0.000s 17:36:17 000045 KNAX6015-E 引数が必要な組み込みコマンドに対して,引数を指定しないで実行しました。filename="d:\home\usr\cld.sh" line=3 17:36:17 000045 KNAX6521-E コマンド(unset, 行番号=3)がエラー終了しました。rc=1 E-Time=0.001s C-Time=0.000s 17:36:17 000045 KNAX6584-I ジョブ定義スクリプトの実行を停止するコマンドが実行されたため,バッチジョブの実行を中断しました。 17:36:17 000045 KNAX0101-E ADSH000045 ジョブを実行中にエラーが発生しました。 17:36:17 000045 KNAX6578-I ADSH000045 子孫ジョブが終了しました。rc=16 E-Time=0.006s C-Time=0.015s <<<<<< [JOBLOG] d:\home\usr\cld.sh 17:36:17 000044 KNAX6521-E コマンド(.\cld.sh, 行番号=1)がエラー終了しました。rc=16 E-Time=0.184s C-Time=0.171s 17:36:17 000044 KNAX6116-I コマンド(.\cmdA.exe, 行番号=2)が正常終了しました。rc=0 E-Time=0.049s C-Time=0.046s 17:36:17 000044 KNAX0101-E ADSH000044 ジョブを実行中にエラーが発生しました。 17:36:17 000044 KNAX0098-I ADSH000044 ジョブが終了しました。rc=0 E-Time=0.254s C-Time=0.233s ******** ジョブ定義スクリプトの内容 ******** ***** d:\home\usr\prt.sh ***** 0001 : .\\cld.sh 0002 : .\\cmdA 0003 : ***** パス変換情報 ***** ***** d:\home\usr\cld.sh ***** 0001 : #!/bin/sh 0002 : val=10 0003 : unset 0004 : .\\cmdX $val 0005 : ***** パス変換情報 ***** ******** 実行ジョブのSTDERRファイルの内容 ******** >>>>>> [STDERR] d:\home\usr\cld.sh KNAX0726-I 子孫ジョブのジョブ識別子を割り当てました。Jobid=000045 KNAX0101-E ADSH000045 ジョブを実行中にエラーが発生しました。 KNAX0240-I 環境変数(ADSH_JOBRC_FATAL)の設定(16)が適用されました。 <<<<<< [STDERR] d:\home\usr\cld.sh KNAX0101-E ADSH000044 ジョブを実行中にエラーが発生しました。 KNAX0098-I ADSH000044 ジョブが終了しました。rc=0 E-Time=0.254s C-Time=0.233s ******** ジョブステップの出力 ******** KNAX6380-I ルートジョブのスプールジョブディレクトリにジョブ名を付加します。spool job directory="C:\Documents and Settings\All Users\Documents\Hitachi\JP1AS\JP1ASE\spool\000044-ADSH000044\" KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。rc=0
実行結果の1.と2.について次に説明します。
子孫ジョブの終了コードとして,システム環境変数ADSH_JOBRC_FATALの設定値が適用されています。
子孫ジョブでシステム環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。