JP1/Advanced Shell
ジョブ定義スクリプトを子孫ジョブとして実行する方法について説明します。その他のコマンドとの実行方法の比較については,「5.1.9 外部コマンドの実行」を参照してください。
- <この項の構成>
- (1) 子孫ジョブの動作
- (2) ルートジョブや外部スクリプトとの機能比較
- (3) 子孫ジョブの非同期実行に関する注意事項
- (4) シグナル受信時の子孫ジョブの動作
ルートジョブの子孫プロセスとして実行されるジョブ定義スクリプトのうち,CHILDJOB_SHEBANGパラメーター(Windows,Linux限定)によって実行されたジョブを子孫ジョブと呼びます。
子孫ジョブを起動するには,ジョブ定義スクリプトにCHILDJOB_SHEBANGパラメーター(Windows,Linux限定)で定義したファイルをコマンド名として指定します。
子孫ジョブを起動する場合のジョブ定義スクリプトの例を次に示します。
cmdA /jp1as/childjob.ash #コマンド名にほかのジョブ定義スクリプトを指定 cmdBこの例では,コマンド名にほかのジョブ定義スクリプトchildjob.ashを指定しています。このとき,JP1/Advanced Shellは子プロセスとしてJP1/Advanced Shellのジョブを起動し,childjob.ashを子孫ジョブとして実行します。この場合の子孫ジョブを起動する動作の例を次の図に示します。
図3-1 子孫ジョブを起動する動作の例
(2) ルートジョブや外部スクリプトとの機能比較
ルートジョブ,子孫ジョブおよび外部スクリプトの機能比較を次に示します。
機能 ジョブ 外部スクリプト ルートジョブ 子孫ジョブ .コマンドの外部スクリプト #-adsh_scriptの外部スクリプト 呼び出し元ジョブとのプロセスの関係 呼び出し元ジョブの子プロセスで動作する 呼び出し元ジョブの子プロセスで動作する 呼び出し元ジョブと同一プロセスで動作する 呼び出し元ジョブと同一プロセスで動作する 起動するジョブコントローラ
- UNIXの場合
adshexecコマンド
- Windowsの場合
adshexec.exeコマンド+adshexecsub.exeコマンド
- UNIXの場合
adshexecコマンド
- Windowsの場合
adshexecsub.exeコマンド
なし なし スプールジョブディレクトリ 作成する ルートジョブのスプールジョブディレクトリ内に作成し,ジョブ終了時に削除する。
ジョブ実行ログはJOBLOGだけをstderrに出力する作成しない。
(コマンド実行結果を呼び出し元ジョブのJOBLOGに出力する。また,スクリプトイメージは出力しない)作成しない。
(コマンド実行結果を呼び出し元ジョブのJOBLOGに出力する。また,スクリプトイメージを呼び出し元ジョブのSCRIPTに出力する)ジョブ開始・終了メッセージ あり
(KANX0091-IおよびKNAX0098-I)あり
(KANX6571-IおよびKNAX6578-I)なし なし 起動したコマンドを必ずwaitするか CHILDJOB_SHEBANG(Windows,Linux限定)パラメーターの指定があれば,必ずwaitする CHILDJOB_SHEBANG(Windows,Linux限定)パラメーターの指定があれば,必ずwaitする 呼び出し元ジョブの動作に従う 呼び出し元ジョブの動作に従う 環境ファイルの読み込み する する しない
(呼び出し元ジョブの動作に従う)しない
(呼び出し元ジョブの動作に従う)標準入力の使用可否 使用可 使用可 使用可 使用可 標準出力の出力先 -sオプション,およびOUTPUT_STDOUT(Windows,Linux限定)パラメーターの指定に従う 親プロセスから継承した出力先になる 呼び出し元ジョブの動作に従う 呼び出し元ジョブの動作に従う
(3) 子孫ジョブの非同期実行に関する注意事項
子孫ジョブの機能を使用(CHILDJOB_SHEBANGパラメーターを環境ファイルに1つ以上指定)した場合,関連するすべてのルートジョブと子孫ジョブが終了するまでは,ジョブは終了しません。そのため,&や|&による非同期実行を指定して実行したプロセスがすべて完了するまでジョブは終了しません。
また,CHILDJOB_SHEBANGパラメーターを指定した場合と指定しない場合とで,execコマンドの引数に外部コマンドを指定したときのadshexecコマンドの動作は次のように異なります。
- CHILDJOB_SHEBANGパラメーターを環境ファイルに一つも指定しない場合
- UNIX版では,adshexecコマンドのプロセスを外部コマンドのプロセスで上書きして実行します。
- Windows版では,外部コマンドを子プロセスとして実行し,完了を待たないでexecコマンド実行直前の終了コードでシェルスクリプトの実行を終了します。
- CHILDJOB_SHEBANGパラメーターを環境ファイルに1つ以上指定した場合
- 外部コマンドを子プロセスとして実行し,完了を待ちます。完了した外部コマンドの終了コードでシェルスクリプトの実行を終了します。
CHILDJOB_SHEBANGパラメーターを環境ファイルに1つ以上指定してadshexecコマンドを実行した場合,ジョブ終了時に非同期実行プロセスをwaitすることを通知するメッセージKNAX7901-Iが出力されます。このメッセージは,ジョブ実行ログ,システム実行ログおよび標準エラー出力へ出力されます。
(4) シグナル受信時の子孫ジョブの動作
ここでは,シグナル受信時の子孫ジョブの動作を説明します。
次に示すジョブを例に,ルートジョブ,子孫ジョブ,および外部コマンドへ終了要求シグナルを送信した場合の動作を示します。
adshexec(1)-adshexec(2)-adshexec(3)-sleepJP1/AJSから強制終了(JP1/AJSからadshexec(1)へSIGTERM送信)した際,およびログインシェルからadshexec(1)~(3)およびsleepへSIGTERM送信した際の動作を次に示します。
- JP1/AJSからの強制終了時
adshexec(1) rc=143でエラー終了 adshexec(2) rc=143でシグナルによるエラー終了 adshexec(3) rc=143でシグナルによるエラー終了 sleep rc=143でシグナルによるエラー終了 - ログインシェルからadshexec(1)へのSIGTERM送信時
adshexec(1) rc=143でシグナルによるエラー終了 adshexec(2) rc=143でシグナルによるエラー終了 adshexec(3) rc=143でシグナルによるエラー終了 sleep rc=143でシグナルによるエラー終了 - ログインシェルからadshexec(2)へのSIGTERM送信時
adshexec(1)
- ジョブステップの指定がある場合
rc=143でジョブステップエラー終了。ステップエラーブロックやrun abnormal/alwaysの後続ステップを実行
- ジョブステップの指定がない場合
後続処理を続行
adshexec(2) rc=143でシグナルによるエラー終了 adshexec(3) rc=143でシグナルによるエラー終了 sleep rc=143でシグナルによるエラー終了 - ログインシェルからadshexec(3)へのSIGTERM送信時
adshexec(1) adshexec(2)の結果に従う adshexec(2)
- ジョブステップの指定がある場合
rc=143でジョブステップエラー終了。ステップエラーブロックやrun abnormal/alwaysの後続ステップを実行
- ジョブステップの指定がない場合
後続処理を続行
adshexec(3) rc=143でシグナルによるエラー終了 sleep rc=143でシグナルによるエラー終了 - ログインシェルからsleepへのSIGTERM送信時
adshexec(1) adshexec(2)の結果に従う adshexec(2) adshexec(3)の結果に従う adshexec(3)
- ジョブステップの指定がある場合
rc=143でジョブステップエラー終了。ステップエラーブロックやrun abnormal/alwaysの後続ステップを実行
- ジョブステップの指定がない場合
後続処理を続行
sleep rc=143でシグナルによるエラー終了
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.