Hitachi

JP1 Version 10 JP1/Advanced Shell


2.6.15 ジョブを続行できないエラーが発生したときの終了コードを定義する

メモリ不足やジョブ定義スクリプトの解析エラーなど,ジョブの実行を継続できないエラーによってジョブが終了した場合,ジョブコントローラの終了コードは1となります。しかし,環境変数ADSH_JOBRC_FATALに値を設定しておくことで,この場合の終了コードを1〜255に変更できます。

環境変数ADSH_JOBRC_FATALの設定方法については,「(2) 環境変数ADSH_JOBRC_FATAL(ジョブ続行不可エラー発生時の終了コードを設定する)」を参照してください。

〈この項の構成〉

(1) 環境変数ADSH_JOBRC_FATALの適用可否

ジョブコントローラの動作中に発生するエラーの種類と,それに対する環境変数ADSH_JOBRC_FATALでの終了コード定義の適用可否を次の表に示します。

表2‒19 エラーの種類ごとの環境変数ADSH_JOBRC_FATALの適用可否

項番

エラーの発生時期

エラーの種類

適用可否※1

1

adshexecコマンドでのジョブ起動時,

またはエディタからのジョブ定義スクリプトのデバッグ実行時

OSがadshexecコマンドの実行を開始できないエラーです。

例えば,adshexecコマンドが使用するロードモジュールが存在しないエラーが該当します。

×

2

ジョブ定義スクリプトの実行前

環境変数ADSH_JOBRC_FATALの解析エラーです。

×※2

3

イベントファイルの初期化エラーです。

×

4

【UNIX限定】シグナル受信によるエラーです。

×※3

5

【Windows限定】TerminateProcessなどによって,次に示すどれかのプロセスを即時終了したことによるエラーです。

  • adshexec.exe

  • adshexecsub.exe

  • adshesub.exe

  • adshedit.exe

×

6

項番2〜項番5以外で発生するすべてのエラーです。代表的なエラーは次のとおりです。

  • adshexecコマンドのコマンドライン解析エラー

  • adshexecコマンドの引数に指定したジョブ定義スクリプトファイルの状態不正エラー

  • 環境ファイル解析エラー

  • ジョブ定義スクリプトの解析エラー

  • ジョブ実行ログ,システム実行ログ,トレースログの初期化エラー

  • ascファイルの初期化エラー

  • 【Windows限定】ライセンスチェックエラー

  • 【Windows限定】制御信号(CTRL+C,CTRL+BREAK,CTRL_CLOSE_EVENT)の受信によるエラー

7

ジョブ定義スクリプトの実行中

ジョブ定義スクリプトの処理を続行するエラーです。※4

×

8

デバッグ実行中に,次に示すデバッガのコマンドやメニュー,ボタンを使用してジョブを途中で終了させたことによるエラーです。

  • 【UNIX限定】killコマンドの実行,quitコマンドの実行およびrunコマンドの再実行

  • 【Windows限定】[デバッグの中止]メニューの選択,[デバッグの中止]ボタンのクリック,およびエディタウィンドウを閉じることによるデバッグ実行の中断

×

9

【UNIX限定】シグナル受信によるエラーです。

×※3

10

【Windows限定】TerminateProcessなどによって,次に示すどれかのプロセスを即時終了したことによるエラーです。

  • adshexec.exe

  • adshexecsub.exe

  • adshesub.exe

  • adshedit.exe

×

11

項番7〜項番10以外で発生するすべてのエラーです。代表的なエラーを次に示します。

  • 特殊組み込みコマンドのエラー(ただし,typesetコマンドのエラー,関数内または外部スクリプト内で実行したreturnコマンドのエラーを除く)

  • 代入演算のエラー※5

  • ジョブを終了する書式の変数置換の実行で発生するエラー※6

  • 配列の要素の範囲外(0〜65535以外)を指定したことによるエラー

  • メモリやディスク容量不足など資源が確保できないエラー

  • 入出力エラー

  • 内部矛盾エラー

  • 【Windows限定】制御信号(CTRL+C,CTRL+BREAK,CTRL_CLOSE_EVENT)の受信によるエラー

  • 【Windows限定】演算子-h,-G,-L,-O,または-efを使った条件式を実行したことによるエラー(UNSUPPORT_TESTパラメーターでERR以外を指定した場合は除く)

12

ジョブ定義スクリプトの実行後

【UNIX限定】シグナル受信によるエラーです。

×※3

13

ファイルやディレクトリに関する,次に示すエラーです。

  • スクリプト拡張コマンドで割り当てたファイルの解放エラー

  • スプールジョブ管理ファイルの後処理エラー

  • ルートジョブのスプールジョブディレクトリの後処理エラー

  • イベントファイルの後処理エラー

×

14

【Windows限定】TerminateProcessなどによって,次に示すどれかのプロセスを即時終了したことによるエラーです。

  • adshexec.exe

  • adshexecsub.exe

  • adshesub.exe

  • adshedit.exe

×

15

項番12〜項番14以外で発生するすべてのエラーです。代表的なエラーを次に示します。

  • ascファイルの後処理エラー

  • 子孫ジョブのスプールジョブディレクトリの削除エラー

  • 【UNIX限定】.DBGファイルの解析エラー

  • 内部矛盾エラー

  • 【Windows限定】制御信号(CTRL+C,CTRL+BREAK,CTRL_CLOSE_EVENT)の受信によるエラー

(凡例)

○:環境変数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のエディタから実行されたジョブに対して適用されます。

システム全体でこの環境変数の設定値を有効にする方法を次に示します。

この環境変数を設定しなかった場合,ジョブが続行できないエラーで終了した際のジョブコントローラの終了コードは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.について次に説明します。

  1. 環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。

  2. ジョブコントローラの終了コードとして,環境変数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.について次に説明します。

  1. 子孫ジョブの終了コードとして,環境変数ADSH_JOBRC_FATALの設定値が適用されています。

  2. 子孫ジョブで環境変数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.について次に説明します。

  1. システム環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。

  2. ジョブの終了コードとして,システム環境変数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.について次に説明します。

  1. 子孫ジョブの終了コードとして,システム環境変数ADSH_JOBRC_FATALの設定値が適用されています。

  2. 子孫ジョブでシステム環境変数ADSH_JOBRC_FATALが適用されたことを示すメッセージです。