Hitachi

JP1 Version 11 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‒21 エラーの種類ごとの環境変数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 環境ファイルのパラメーター("SPOOL_DIR")で指定したディレクトリは存在しません。line=1
KNAX0410-E 環境ファイル("sample.ase")の解析でエラーが発生しました。エラーの内容はこのメッセージの前に出力されているメッセージを参照してください。
KNAX0240-I 環境変数(ADSH_JOBRC_FATAL)の設定(8)が適用されました。 …1.
KNAX7999-I ルートジョブのジョブコントローラがバッチジョブを終了しました。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

この場合の実行結果を次に示します。

********  ジョブコントローラのメッセージ出力  ********
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.について次に説明します。

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

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

  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

この場合の実行結果を次に示します。

********  ジョブコントローラのメッセージ出力  ********
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.について次に説明します。

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

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