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
×
- 注※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 Directory of "SPOOL_DIR" is not exist. line=1 KNAX0410-E An error occurred when parsing the file "sample.ase", refer to the message above. KNAX0240-I ADSH_JOBRC_FATAL was applied. value=8 …1. KNAX7999-I JP1/Advanced Shell ended. 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
この場合の実行結果を次に示します。
******** JP1/Advanced Shell MESSAGE ******** 11:06:59 010749 KNAX0091-I ADSH010749 Job started. 11:06:59 010749 KNAX7901-I adshexec waits for all asynchronous processes at the end of the job. 11:06:59 010749 KNAX7902-I adshexec will run in tty stdin mode. 11:06:59 010749 KNAX6831-I CHILDJOB_SHEBANG rule matched. script="./cld.sh" shebang="/bin/sh" 11:06:59 010749 KNAX6521-E Command ./cld.sh(line=1) failed. rc=8 E-Time=0.008s C-Time=0.000s 11:06:59 010749 KNAX6116-I Command ./cmdA(line=2) succeeded. rc=0 E-Time=0.001s C-Time=0.000s 11:06:59 010749 KNAX0101-E ADSH010749 An error occurred during execution of job. 11:06:59 010749 KNAX0098-I ADSH010749 Job ended. rc=0 E-Time=0.011s C-Time=0.000s ******** Script IMAGE ******** ***** /home/xxx/work/prt.sh ***** 0001 : ./cld.sh 0002 : ./cmdA ***** CONVERSION INFORMATION ***** ******** JOB SCOPE STDERR ******** KNAX7901-I adshexec waits for all asynchronous processes at the end of the job. KNAX0724-I Jobid was assigned. Jobid=010750 KNAX0101-E ADSH010750 An error occurred during execution of job. 11:06:59 010750 KNAX6571-I ADSH010750 Child job started. parent jobname=ADSH010749, parent jobid=010749 11:06:59 010750 KNAX7901-I adshexec waits for all asynchronous processes at the end of the job. 11:06:59 010750 KNAX7902-I adshexec will run in tty stdin mode. 11:06:59 010750 KNAX6110-I Command val=10(line=2) succeeded. rc=0 E-Time=0.000s C-Time=0.000s 11:06:59 010750 KNAX6015-E Argument is not specified. filename="/home/xxx/work/cld.sh" line=3 11:06:59 010750 KNAX6521-E Command unset(line=3) failed. rc=1 E-Time=0.000s C-Time=0.000s 11:06:59 010750 KNAX6584-I Job is stopped because the command that stops script was executed. 11:06:59 010750 KNAX0101-E ADSH010750 An error occurred during execution of job. 11:06:59 010750 KNAX6578-I ADSH010750 Child job ended. rc=8 E-Time=0.001s C-Time=0.000s …1. KNAX0240-I ADSH_JOBRC_FATAL was applied. value=8 …2. KNAX0101-E ADSH010749 An error occurred during execution of job. KNAX0098-I ADSH010749 Job ended. rc=0 E-Time=0.011s C-Time=0.000s ******** JOBSTEP OUTPUT ******** KNAX6380-I Job name will be added to spool job directory. spool job directory="/var/opt/jp1as/spool/010749-ADSH010749/" KNAX7999-I JP1/Advanced Shell ended. 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 Directory of "LOG_DIR" is not exist. line=1 KNAX0410-E An error occurred when parsing the file "sample.ase", refer to the message above. KNAX0240-I ADSH_JOBRC_FATAL was applied. value=16 …1. KNAX7999-I JP1/Advanced Shell ended. 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
この場合の実行結果を次に示します。
******** JP1/Advanced Shell MESSAGE ******** 12:18:49 001857 KNAX0091-I ADSH001857 Job started. 12:18:49 001857 KNAX7901-I adshexec waits for all asynchronous processes at the end of the job. 12:18:49 001857 KNAX7902-I adshexec will run in tty stdin mode. 12:18:49 001857 KNAX6831-I CHILDJOB_SHEBANG rule matched. script="./cld.sh" shebang="/bin/sh" 12:18:49 001857 KNAX6521-E Command ./cld.sh(line=1) failed. rc=16 E-Time=0.110s C-Time=0.062s 12:18:49 001857 KNAX6116-I Command ./cmdA.exe(line=2) succeeded. rc=0 E-Time=0.047s C-Time=0.030s 12:18:49 001857 KNAX0101-E ADSH001857 An error occurred during execution of job. 12:18:49 001857 KNAX0098-I ADSH001857 Job ended. rc=0 E-Time=0.157s C-Time=0.123s ******** Script IMAGE ******** ***** D:\work\prt.sh ***** 0001 : ./cld.sh 0002 : ./cmdA ***** CONVERSION INFORMATION ***** ******** JOB SCOPE STDERR ******** KNAX7901-I adshexec waits for all asynchronous processes at the end of the job. KNAX0724-I Jobid was assigned. Jobid=001858 KNAX0101-E ADSH001858 An error occurred during execution of job. 12:18:49 001858 KNAX6571-I ADSH001858 Child job started. parent jobname=ADSH001857, parent jobid=001857 12:18:49 001858 KNAX7901-I adshexec waits for all asynchronous processes at the end of the job. 12:18:49 001858 KNAX7902-I adshexec will run in tty stdin mode. 12:18:49 001858 KNAX6110-I Command val=10(line=2) succeeded. rc=0 E-Time=0.000s C-Time=0.000s 12:18:49 001858 KNAX6015-E Argument is not specified. filename="D:\work\cld.sh" line=3 12:18:49 001858 KNAX6521-E Command unset(line=3) failed. rc=1 E-Time=0.000s C-Time=0.000s 12:18:49 001858 KNAX6584-I Job is stopped because the command that stops script was executed. 12:18:49 001858 KNAX0101-E ADSH001858 An error occurred during execution of job. 12:18:49 001858 KNAX6578-I ADSH001858 Child job ended. rc=16 E-Time=0.016s C-Time=0.016s …1. KNAX0240-I ADSH_JOBRC_FATAL was applied. value=16 …2. KNAX0101-E ADSH001857 An error occurred during execution of job. KNAX0098-I ADSH001857 Job ended. rc=0 E-Time=0.157s C-Time=0.123s ******** JOBSTEP OUTPUT ******** KNAX6380-I Job name will be added to spool job directory. spool job directory="C:\Documents and Settings\All Users\Documents\Hitachi\JP1AS\JP1ASE\spool\001857-ADSH001857\" KNAX7999-I JP1/Advanced Shell ended. rc=0
実行結果の1.と2.について次に説明します。
-
子孫ジョブの終了コードとして,システム環境変数ADSH_JOBRC_FATALの設定値が適用されています。
-
子孫ジョブでシステム環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。
-