3.12.2 PREST機能
ジョブおよびジョブステップ間で使用するファイルに,名前付きパイプ(FIFO)が指定できる。この機能をPREST機能と呼び,名前付きパイプをPRESTファイルと呼ぶ。
PRESTファイルを使用することで,逐次実行していたジョブおよびジョブステップを並列に実行することが可能となり,処理時間を短縮できる。
PRESTファイルはジョブ定義XMLファイルのDD要素で指定することで,ジョブ実行時にジョブコントローラによって一時ファイルディレクトリに自動生成され,プログラムで利用可能となる。PRESTファイルの名称は,一般のファイルと同様に環境変数に設定する。ジョブコントローラが生成したPRESTファイルは,ジョブ終了時にPRESTファイルを利用するジョブがなくなった時点で,ジョブコントローラが自動的に消去する。
PRESTファイルには,ジョブ間PRESTファイルおよびジョブステップ間PRESTファイルの2種類がある。ジョブ間PRESTファイルを使用する場合は,設定ファイルのLOCK_OPTIONパラメータでENABLEを指定し,バッチジョブ実行システムの排他制御機能を有効にする必要がある。
- 〈この項の構成〉
(1) ジョブ間PRESTファイル
ジョブ間PRESTファイルは,ジョブ間でPRESTファイルを使用する場合に使用する。
ジョブ間PRESTファイルは,同一ジョブ内で並列実行するジョブステップ間での使用もできるが,ジョブ間での使用を推奨する。
ジョブ間PRESTファイルは,ジョブ定義XMLファイルのDD要素でTYPE="PREST"を指定した場合に作成される。この場合,DSN属性にジョブ間PRESTファイルを識別するためのPREST識別名を指定する。また,DISP属性は省略する。DISP属性を指定した場合,DISP="SHR,KEEP,KEEP"を仮定する。
設定ファイルのLOCK_OPTIONパラメータにDISABLEを指定している場合,TYPE="PREST"を指定すると,ジョブ定義XMLファイルの解析時にエラーとなる。
ジョブ定義XMLファイルのDD要素での指定例を次に示す。
<DD NAME="A" DSN="X" TYPE="PREST"/>
-
ジョブ間PRESTファイルの名称
ジョブ間PRESTファイルは,ジョブコントローラによってバッチジョブ実行システムの一時ファイルディレクトリに,次に示す名称で生成される。
PREST_PREST識別名
この名称がプラットフォームの上限値を超えない範囲で運用する必要がある。上限を超えた場合,ジョブ定義XMLファイルの解析時にはエラーとならないで,実行時のPRESTファイル割り当て時にエラーとなる。また,新規割り当て時に同一名のファイルがある場合,ファイルにアクセス権がなければプログラムはエラーで終了する(この場合,名前付きパイプを削除するコマンドなどで削除するまでは,このPRESTファイルを使用するジョブは実行できない)。
-
ジョブ間PRESTファイルのパーミッション
ジョブ間PRESTファイルのパーミッションは,読み込みを行うジョブを実行するユーザに対して読み込み権限,書き込みを行うジョブを実行するユーザに対して書き込み権限がそれぞれ必要である。パーミッションは,次に示す優先順位に従って決定する(優先順位は1が最も高い)。
-
ジョブ定義XMLファイルのDD要素のFPERM属性
-
ジョブ定義XMLファイルのPERMISSION要素のFILE属性
-
設定ファイルのPERMISSION_FILEパラメータ(省略時は0600)
ただし,上記の要素・属性に0600を指定し,同一ユーザのジョブで使用することを推奨する。
-
(2) ジョブステップ間PRESTファイル
ジョブステップ間PRESTファイルは,並列実行するジョブステップ間でPRESTファイルを使用する場合に使用する。
ジョブステップ間PRESTファイルは,ジョブ定義XMLファイルのDD要素でTYPE="TEMPPREST"を指定した場合に生成される。この場合,DSN属性として一時ファイル識別名を指定する。また,DISP属性は省略する。DISP属性を指定した場合,DISP="SHR,KEEP,KEEP"を仮定する。
ジョブ定義XMLファイルのDD要素での指定例を次に示す。
<DD NAME="A" DSN="X" TYPE="TEMPPREST"/>
-
ジョブステップ間PRESTファイルの名称
ジョブステップ間PRESTファイルは,ジョブコントローラによってバッチジョブ実行システムの一時ファイルディレクトリに,次に示す名称で生成される。
TEMPPREST_ジョブ識別子_ジョブ名_一時ファイル識別名
この名称がプラットフォームの上限値を超えない範囲で運用する必要がある。上限を超えた場合,ジョブ定義XMLファイルの解析時にはエラーとならないで,実行時のPRESTファイル割り当て時にエラーとなる。また,新規割り当て時に同一名のファイルがある場合,そのファイルをそのまま使用するが,ファイルにアクセス権がなければプログラムはエラーで終了する(この場合,名前付きパイプを削除するコマンドなどで削除するまでは,このPRESTファイルを使用するジョブは実行ができない)。
-
ジョブステップ間PRESTファイルのパーミッション
ジョブステップ間PRESTファイルのパーミッションは0600で作成する。
ジョブステップ間PRESTファイルのパーミッションは変更できない。
(3) ジョブ間PRESTファイルの使用状況の表示
ジョブ間PRESTファイルの使用状況は,bjexlslockコマンドで表示できる。
ジョブ間PRESTファイルを使用するジョブは,PRESTファイルを利用してデータを受け渡しする相手のジョブがいない場合に待ち状態になる。このような状態のジョブを発見するためにbjexlslockコマンドを使用する。
次に示す内容でbjexlslockコマンドを実行すると,待ち状態になっているジョブ間PRESTファイルの表示ができる。
bjexlslock -l -t PREST
表示されたジョブ間PRESTファイルの名称とジョブ識別子を基に,ジョブやジョブスケジュールの定義を見直し,待ち状態の原因を調査する。
(4) PRESTファイルを使用できるプログラムとファイル
PRESTファイルは順次入力または順次出力だけを実行するプログラム間に適用できる。入力側のプログラムは,出力側のプログラムがPRESTファイルに出力したデータを,すべて入力する必要がある。また,複数のPRESTファイルを使用する場合,ファイルのオープン順序などがプログラム間でデッドロックまたは長時間の待ち状態とならないようにする必要がある。PRESTファイルはすべてのプログラムで適用できるわけではないため,PRESTファイルを使用する場合には,プログラムの処理が名前付きパイプに対応している必要がある。
バッチジョブ実行システムでは,PREST機能に対応したSORT EE,COBOLまたはファイル操作ユティリティ以外でPRESTファイルを使用した場合の動作は保証しない。ファイルのオープン順序が特定できないプログラムでは,PRESTファイルの使用は1個にとどめることを推奨する。
また,SORT EE,COBOLまたはファイル操作ユティリティで使用できるPRESTファイルの形式は,順編成だけである。
(a) プログラムが長時間待ち状態となる例
プログラムが長時間待ち状態となる例を次に示す。
-
例1
-
例2
-
例3
(b) プログラムがデッドロックになる例
プログラムがデッドロックになる例を次に示す。
-
例1
-
例2
(5) PREST機能に関する注意事項
-
ジョブ間PRESTファイルを使用する場合,ジョブ間PRESTファイルを使用するジョブが同一システム内で同時に実行する運用となるように配慮する必要がある。片方だけしか実行しない場合には,ジョブは待ち状態になる。待ち状態になった場合には,JP1/AJSから手作業でジョブを強制終了する必要がある。また,JP1/AJSでジョブ実行時間の打ち切り時間を設定して,長時間待ち状態になることを回避する必要がある。
-
PRESTファイルを使用する場合,入力側のプログラムは,出力側が出力したデータをすべて読み込む必要がある。データの入力が途中で中止されると,PRESTファイルのバッファが出力データで満杯となった時点で,出力側のプログラムは待ち状態になる。また,入力側がPRESTファイルをクローズしてから出力側のプログラムがデータを出力すると,出力側のプログラムが異常終了する。
-
PRESTファイルは入力側と出力側の関係が1対1となっている必要があり,1対多または多対1での使用はできない。
1対1でない場合,ジョブ定義XMLファイルの解析時またはPRESTファイル割り当て時にエラーとなる。
-
ジョブステップ間PRESTファイルは,並列実行するジョブステップ間でだけ使用できる。並列実行しないジョブステップ間で,ジョブステップ間PRESTファイルの指定が1対1でない場合,ジョブ定義XMLファイルの解析時にエラーとなる。また,並列実行しないジョブステップにジョブステップ間PRESTファイルを指定した場合,ジョブ定義XMLファイルの解析時にエラーとなる。
-
バッチジョブ実行システムに障害があった場合,使用されないPRESTファイルが残る可能性がある。この場合,一時ファイルディレクトリを調査して使用されていないPRESTファイル(名前付きパイプ)を手作業で削除する必要がある。AIXではOSのunlinkコマンドで削除する。
-
PREST機能を使用するジョブステップがJOB要素またはEXEC要素のCOND属性で実行されない場合,相手のジョブまたはジョブステップは,待ち状態になる。このため,PREST機能を使用するジョブのJOB要素またはEXEC要素にCOND属性を指定する場合は,注意が必要である。
-
PRESTファイルはファイル連結しないこと。