関連情報
BPXBATCH を使用すると、MVS™ ジョブ制御言語 (JCL) を用いて、z/OS® UNIX ファイルに常駐するシェル・スクリプトおよび実行可能ファイルを簡単に実行できるようになります。作業の大部分を TSO/E から行う場合、BPXBATCH は、シェル・スクリプトおよび実行可能ファイルを実行するために
シェルに入る手間を省きます。REXX EXEC も BPXBATCH を使用して
シェル・スクリプトおよび実行可能ファイルを実行することができます。以下のセクションを必ずお読みください。
BPXBATCH を使用するだけでなく、環境設定に関与せずに (すなわち、ユーザ
ーのプロファイルで設定されている場合に、変更することができる特定の
環境変数を設定しなくても済む) ローカル spawn を実行したいユーザーは、BPXBATSL を使用することができます。
BPXBATSL を使用すると、BPXBATCH への代替エントリー・ポイントが提供さ
れ、BPXBATCH と同様にプログラムは fork/EXEC ではなくローカル spawn を
使用して強制的に実行されます。これにより、プログラムは最終的には
さらに速く実行されることになります。
ユーザーが自分のプログラムのローカル spawn を実行したいけれども、後続の子プロセスに対して fork/EXEC が実行される必要があるような場合に
も、BPXBATSL は役立ちます。
以前は、これを行うことができませんでした。それは、BPXBATCH と要求されたプログラムが環境変数を共用したためです。
以下の条件に合わなければ BPXBATSL の起動時に失敗します。
これらの制限の詳細については、「z/OS UNIX System Services プログラミング: アセンブラー呼び出し可能サービス 解説書」の spawn() 関数
および BPX1SPN 呼び出し可能サービスの説明を参照してください。
- 起動側は、SH 要求を出すには 0 の UID を持つ必要があります。
- 子プロセスが、親と異なる値に setuid または setgid されていません。
- 生成されるファイル名が外部リンクまたはスティッキー・ビット・ファイルではありません。
- 子プロセスが同じアドレス・スペースに常駐できるだけの十分なリソースが親にあります。
BPXBATSL は BPXBATCH の別名です。
BPXBATA2 および BPXBATA8 は、APF に認可された BPXBATSL の代替手段として提供されます。BPXBATA2 および BPXBATA8 は、ターゲットの APF 認可 z/OS UNIX プログラムを発信ジョブと同じアドレス・スペースで実行できる機能を提供するため、同じ割り振り、ジョブ・ログなどを共用できます。BPXBATA2 は、特に APF 許可 z/OS UNIX プログラムを PSW キー 2 で開始する機能を提供することを目的としています。ターゲット・プログラムが制御 PSW キー 2 を確実に受け取るように、BPXBATA2 が PSW キー 2 を始動することを指定する BPXBATA2 の PPT 項目をセットアップする必要があります。
さらに、次のように BPXBATSL に適用されるのと同じ制約事項が BPXBATA2 および BPXBATA8 にも適用されます。
- PGM キーワードは、サポートされる唯一の呼び出しタイプです。SH キーワードは、サポートされていません。
- インターフェースは、開始タスク・アドレス・スペースからしか使用できません。
- BPXBATA2 および BPXBATA8 ジョブのターゲットである z/OS UNIX プログラムを、APF 認可実行可能ファイルとしてマークする必要があります。
BPXBATA8 および BPXBATA2 インターフェースを異なる方法で使用するのは、サポートされず、呼び出すジョブが失敗する原因となります。
形式
JCL の場合:
EXEC PGM=BPXBATCH,PARM='SH|PGM program_name'
TSO/E の場合:
BPXBATCH SH|PGM program_name
説明
BPXBATCH プログラムを使用すると、シェル・コマンドまたはスクリプト、または z/OS XL C/C++ 実行可能ファイルをシェル・セッションから実行する MVS バッチ・ジョブをサブミットできます。BPXBATCH は、JCL ジョブまたは TSO/E から (コマンドとして、CALL コマンドを通じて、または CLIST か REXX EXEC から) 起動することができます。
BPXBATCH では、MVS 標準ファイルの stdin を、入力を渡すための z/OS UNIX ファイルとして
割り当てることができます。MVS 標準ファイルの stdout、stderr、または stdenv を MVS データ・セットまたは z/OS UNIX テキスト・ファイルとして割り当てることができます。環境変数を格納する stdenv ファイル、またはジョブ出力を保存するための stderr ファイルと stdout ファイルは、SYSOUT、PDSE、PDS、または順次データ・セットとして割り当てることができます。このファイ
ルを割り当てないと、stdin、stdout、stderr および
stdenv はデフォルトで
/dev/null になります。stdenv、stdout および stderr のための標準ファイルは、データ定義 PATH キーワード・オプションまたは MVS データ・セットの
標準データ定義オプションを使用して割り当ててください。
MVS データ・セットの場合は、MVS データ・セットの標準データ定義を使用してください。
JCL ジョブの場合、PATH キーワード・オプションを DD ステートメントで指定します。
//jobname JOB …
//stepname EXEC PGM=BPXBATCH,PARM='SH|PGM program_name'
//STDIN DD PATH='/stdin-file-pathname',PATHOPTS=(ORDONLY)
//STDOUT DD PATH='/stdout-file-pathname',PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=SIRWXU
//STDERR DD PATH='/stderr-file-pathname',PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=SIRWXU
⋮
実行可能ファイル内のアプリケーションは
、stdin、stdout、stderr、お
よび stdenv を、SVC 99 を使用して動的に割り当て
ることができます。
TSO/E の場合、PATH キーワード・オプションを ALLOCATE コマンドで指定します。
ALLOCATE FILE(STDIN) PATH('/stdin-file-pathname') PATHOPTS(ORDONLY)
ALLOCATE FILE(STDOUT) PATH('/stdout-file-pathname')
PATHOPTS(OWRONLY,OCREAT,OTRUNC) PATHMODE(SIRWXU)
ALLOCATE FILE(STDERR) PATH('/stderr-file-pathname')
PATHOPTS(OWRONLY,OCREAT,OTRUNC) PATHMODE(SIRWXU)
BPXBATCH SH|PGM program_name
stdin と stdenv は、常に
読み取り用として割り当てる必要があります。stdout と stderr は、常に書き込み用として
割り当てる必要があります。
前に述べたように、環境設定に関与せずに (すなわち、ユーザーのプロファイルで設定されている場合に、変更することができる特定の環境変数を設定しなくても済む) ローカル spawn を実行したいユーザーは、BPXBATSL を使用することができます。
BPXBATSL を使用すると、BPXBATCH への代替エントリー・ポイントが提供さ
れ、BPXBATCH と同様にプログラムは fork/EXEC ではなくローカル spawn を
使用して強制的に実行されます。これにより、プログラムは最終的には
さらに速く実行されることになります。
以下の例は、BPXBATSL から制御を与えられたプログラムがアクセス
できる DD ステートメントを含んでいます。
//jobname JOB ...
//stepname EXEC PGM=BPXBATSL,PARM='PGM program_name'
/* The following 2 DDs are still available in the program which gets
/* control from BPXBATSL.
//DD1 DD DSN=MVSDSN.FOR.APPL1,DISP=SHR
//DD2 DD DSN=MVSDSN.FOR.APPL2,DISP=SHR
/* The following DDs are processed by BPXBATSL to create file descriptors
/* for stdin, stdout, stderr
//STDIN DD PATH='/stdin-file-pathname',PATHOPTS=(ORDONLY)
//STDOUT DD PATH='/stdout-file-pathname',PATHOPTS=(OWRONLY,OCREAT,OTRUNC
// PATHMODE=SIRWXU
//STDERR DD PATH='/stderr-file-pathname',PATHOPTS=(OWRONLY,OCREAT,OTRUNC
// PATHMODE=SIRWXU
パラメーター
BPXBATCH は、1 つのパラメーター・ストリング、すなわち
、SH|PGM と program_name の組み合わせを入力として受け入れます。1 つ以上
のブランク文字でパラメーター・ストリングの各部分を区切る必要があります。パラメーター・ストリングの全長は、32754 文字までサポートされるようになります。
BPXBATCH は最初は、JCL を使用して実行するように作成されました。
このパラメーターの最大長は 100 です。現在では、BPXBATCH は CLIST、
REXX、および TSO から呼び出すこともできます。このような追加の環境では、文字パラメーター制限は 100 になっていません。TSO コマンド環境の場合、パラメーター・ストリング自体は最大 32754 文字をサポートします。
BPXBATCH へのパラメーターは、stdparm DD によっても、上限の 65,536 文字まで指定できます。stdparm DD が割り振られると、BPXBATCH は、パラメーター・ストリングまたは stdin DD にあるデータではなく、この DD に関連付けられた z/OS UNIX ファイルまたは MVS データ・セットにあるデータを使用します。
ユーザーへの警告として、この状況を示す通知メッセージ BPXM079I が表示されます。stdparm DD により、z/OS UNIX ファイル、MVS SYSIN、PDS または PDSE メンバー、順次データ・セットのいずれかが許可されます。
SH または PGM のいずれもパラメーター・ストリングの部分として指定されていない場合、BPXBATCH は、
stdin によって割り当てられるシェル・スクリプトを実行するために、シェルが開始しようとしていると想定します。
- SH|PGM
- BPXBATCH が、z/OS UNIX ファイルにあるシェル・スクリプトまたはコマンド、あるいは z/OS XL C/C++ 実行可能ファイルのどれを実行するかを指定します。
- SH
- TSO/E ユーザー ID のセキュリティー製品プロファイル内に指定されたシェルを開始し、stdin または指定の program_name から提供されるシェル・コマンドまたはスクリプトを実行することを指定します。
SH の指定に program_name の情報がない場合、BPXBATCH は stdin から読み込まれたものは何でも実行しようとします。
- PGM
- program_name パラメーターによって識別されるプログラムを BPXBATCH から直接呼び出すこと指定します。これは、spawn または fork/exec のいずれかを使用して実行されます。BPXBATCH は、プログラムを実行するためのプロセスを作成し、次にプログラムを呼び出します。PGM を指定する場合は、program_name も指定する必要があります。
stdenv ファイルから読み込まれたすべての環境変数は、stdenv が割り当て済みであれば、プログラムが実行されるときに設定されます。HOME および LOGNAME 変数が stdenv ファイル内に指定されていない場合、または stdenv が割り当てられていない場合、可能であれば、HOME および LOGNAME はプログラムが実行されたときに設定されます。
環境変数処理の詳細については、使用上の注意を参照してください。
制約事項: PGM を使用する場合、program_name にシェル固有の機能を含むことはできません。理由は、その機能を解決できないからです。シェル固有の機能を指定する必要がある場合、SH を使用してエラー発生の可能性の防止と
予期できない結果の防止を行う必要があります。
- program_name
- 実行するシェル・スクリプトまたは z/OS XL C/C++ 実行可能ファイルの
シェル・コマンド名または z/OS UNIX パス名を指定します。これらに加えて、program_name にはオプション情報を入れることもできます。
program_name には、大文字小文字の区別があるものとして解釈されます。
PGM および program_name が指定されていて、指定のプログラム名がスラッシュ文字 (/) で始まっていない場合、BPXBATCH は、ユーザーの初期作業ディレクトリー情報をプログラム・パス名の前に付けます。
使用上の注意
- BPXBATCH は、SYS1.LINKLIB データ・セットに常駐するプログラム BPXMBATC の別名です。
- BPXBATCH は、プログラム状況ワード (PSW) キー 8 で実行中の
ユーザー・アドレス・スペースから起動される必要があります。
- BPXBATCH は、提供されたパラメーター情報の文字は変換しません。POSIX ポータブル文字セットだけを使用して、z/OS UNIX パス名を含めてパラメーター情報を
提供する必要があります。POSIX ポータブル文字セットについての詳細は、「z/OS UNIX System Services プログラミング・ツール」を参照してください。
- BPXBATCH ジョブが ABEND 4093 理由コード 0000001c を戻した場合は、領域サイズを拡張する必要があります。例えば、以下のとおりです。
//SHELLCMD EXEC PGM=BPXBATCH,REGION=8M,PARM='SH shell_cmd'
- BPXBATCH は、stdin、stdout、stderr、stdenv、stdparm 以外の DD 名はサポートしていません。これ以外の DD 名の割り振り、または参照を試みると、エンキュー障害
または予期しない結果になります。MVS データ・セットをバッチ UNIX アプリケーションで使用するには、
SVC99 または TSO ALLOC コマンドなどの「動的割り振り」を使用してください。さらに、すべての「静的割り振り」(問題の MVS データ・セットを
参照する DD 名) を、バッチ・ジョブ中の全ステップから取り除く必要があります。
- stdout または stderr に MVS データ・セットを定義する場合は、以下の点を考慮してください。
- それは、順次データ・セット、区分データ・セット (PDS) メンバー、拡張区分データ・セット (PDSE) メンバー、SYSOUT のいずれかでなければなりません。
- データ・セットは論理レコード長 (LRECL) がゼロでなく、定義済みのレコード・フォーマット (RECFM) を備えていなければなりません。そうでない場合、BPXBATCH は失敗し、影響を受けた DD 名のオープン失敗を示すエラー・メッセージ BPXM012I が出ます。
- ターゲットの stdout または stderr データ・セットの LRECL が出力行を保持するのに十分な大きさでない場合は、データの切り捨てが行われ、そのことを示すメッセージ BPXM080I が出力されます。これは、固定長ブロック化データ・セットと可変長ブロック化データ・セットのどちらでも起きる可能性があります。可変長ブロック化データ・セットの場合、各レコード、レコード・セグメント、またはブロックの最初の 4 バイトは、制御情報が入った記述子ワードを形成します。stdout および stderr DD への出力の切り捨てを避けたい場合は、指定する LRECL の中に、それらの追加の 4 バイトを考慮する必要があります。
- stdout と stderr の DD 名に同じ区分データ・セットの 2 つのメンバーを使用する場合は、PDS でなく、PDSE を使用する必要があります。PDSE の代わりに PDS を使用すると、213 異常終了 (およびバッチ・ジョブで実行中の場合はジョブ・ステップの異常終了) になるか、メンバー内に予期した出力が生じない可能性があります。
- stdout または stderr の DD 名に MVS データ・セットを指定した場合は、ターゲットの z/OS UNIX プログラムを実行するために子プロセスが作成されます。子プロセスは、BPXBATCH ジョブとは別のアドレス・スペースで実行される場合もあります。その場合、子のジョブ・ログ・メッセージは BPXBATCH ジョブのジョブ・ログに記録されません。子のジョブ・ログ・メッセージを取り込むためには、_BPXK_JOBLOG=STDERR 環境変数を設定します。これにより、子のジョブ・ログ・メッセージは BPXBATCH ジョブで指定された stderr データ・セットに書き込まれます。
- z/OS の初期のリリースでは、stdout または stderr に MVS データ・セットが指定された場合、BPXBATCH はこのデータ・セットを無視し、/dev/null をデフォルトとして使用しました。
この動作との互換性を残すために、現行サポートは、
MVS データ・セット・タイプがサポートされていない場合 (例えば、DD Dummy、Terminal、SYSIN など)、
または MVS データ・セットを BPXBATCH で開くことができない場合、同じデフォルト動作を行います。
また、BPXBATCH によってこのデフォルト動作が実行されるときは、
そのことを示すメッセージ BPXM081I が表示されます。
- stdout または stderr が PDS または PDSE メンバーとして割り振られ、同じジョブまたはコマンドの複数回の実行によって出力の上書きが予期される場合は、データ・セットの割り振りに NEW のファイル属性指定を使用せず、SHR または OLD として割り振ってください。データ・セットを NEW として割り振った場合、そのメンバーは 1 回目の実行で作成されますが、その後の実行では、そのメンバーに書き込もうとしたときに入出力エラーになります。
- stdout または stderr が順次データ・セットとして割り振られ、同じジョブまたはコマンドの複数回の実行によって出力の追加が予期される場合は、データ・セットの割り振りに MOD のファイル属性指定を使用してください。
- 一般に、MVS データ・セットを stdout または stderr (あるいは、stdparm または stdenv) の DD 名に対して定義した場合に発生する入出力エラーは異常終了 (x13 または x37 など) となり、バッチ・ジョブで実行中の場合は、ジョブ・ステップの異常終了となります。ただし、異常終了 B37 の場合は無視されます。
例: ユーザーが stdout に定義されたデータ・セットに対するセキュリティー・アクセス権を持っていない場合、BPXBATCH でそのデータ・セットを開こうとすると 913 異常終了が発生し、メッセージ IEC150I でエラーの詳細が提供されます。
- stdout および stderr の MVS データ・セットまたは SYSOUT への送信時にタイムアウトの異常終了が発生する可能性を避けるためには、EXEC ステートメントで TIME=1440
(NOLIMIT) を指定します。
- BPXBATCH は、TSO コマンド環境から呼び出された場合、最大 32754 文字のパラメーター・ストリングをサポートするようになっています。また、バッチと TSO 環境のどちらからも、stdparm という名前の新しい入力 DD を介して最大 65,536 文字を提供できるようになりました。stdparm DD が割り振られると、BPXBATCH は、パラメーター・ストリングまたは stdin DD にあるデータではなく、この DD に関連付けられた z/OS UNIX ファイルまたは MVS データ・セットにあるデータを使用します。
ユーザーへの警告として、この状況を示す通知メッセージ BPXM079I が表示されます。
stdparm DD により、z/OS UNIX ファイル、MVS SYSIN PDS、PDSE または順次データ・セットのいずれかが許可されます。以下に、z/OS UNIX ファイルを指定した場合に
stdparm DD で入力できるパラメーター・データの特性を示します。
MVS データ・セットを指定する場合は、以下のようにします。
- 行あたり 1 つの引数を指定します。引数のパラメーター・ストリングがデータ・セットまたはファイルで複数行にまたがる場合、このストリングは複数の引数に分割され、対応するシェル・スクリプトまたはプログラムに渡されます。
- プログラムに提示される単一の引数の最大長は 32,760 です。これは、複数にまたがっていない非 VSAM データ・セットに対する最大 LRECL と同じです。
- データ・セットのレコード・フォーマットは、固定または可変 (複数にまたがらない) にすることができます。
- データ・セットにシーケンス番号を含めてはなりません。ISPF エディターを使用してデータ・セットを編集する場合、データを入力する前に、コマンド行で number off と入力してシーケンス番号をオフに設定します。すでにシーケンス番号が存在する場合、UNNUM と入力して除去してから、番号モードをオフに設定します。
- 末尾ブランクは、SYSIN および可変ブロック・データ・セットの場合は切り捨てられますが、固定ブロック・データ・セットの場合は切り捨てられません。固定ブロック・データ・セットの場合、末尾ブランクは、指定された引数からレコードの最後までパラメーター・テキストに組み込まれます。
- BPXBATCH は 0 から 2 以外のファイル・ディスクリプターをクローズ
しません。BPXBATCH を呼び出しているときに開かれていて、“marked to be closed” と
して定義されていない他のファイル・ディスクリプターは開かれたままであり
、BPXBATCH は指定されたスクリプトまたは実行可能ファイルを実行します。
- BPXBATCH は、オペレーターへの書き込み (WTO) 経路指定コード 11 を使用して、エラー・メッセージを JCL ジョブ・ログまたは TSO/E 端末のいずれかに
書き込みます。TSO/E ユーザー・プロファイルには、端末でメッセージが表示できるように
、WTPMSG を指定しておく必要があります。
- BPXBATCH (SH パラメーターと共に) は、実行可能ファイル、シェル・コマンド、またはシェル・スクリプトを、シェル nohup コマンドも使用されていない限り、バックグラウンド (シェルの & シンボルを指定することによって) で実行するために
使用してはなりません。シェルのアンパーサンド (&) シンボルを nohup なしで使用すると、結果は予測できません。
- BPXBATCH を PGM パラメーター付きで使用すると、実行するプログラムの環境変数が設定されます。stdenv ファイルが割り当てられていなければ、HOME と LOGNAME の環境変数が設定されます。stdenv が割り当てられている場合は、それが表すファイルから読み取られた環境変数が設定されます。HOME または LOGNAME のいずれかまたは両方の環境変数が stdenv ファイルに指定されていない場合は、同時にそれらも追加されます。stdenv には、以下のタイプのファイルを割り当てられます。
- z/OS UNIX テキスト・ファイル
- 順次形式 MVS データ・セット (SYSIN データ・セットを含む)
- 区分データ・セット (PDS) のメンバー
- 拡張区分データ・セット (PDSE) のメンバー
MVS データ・セットの他の形式、すなわち、DUMMY、TERMINAL、あるいは SYSOUT などは、stdenv ではサポートされていません。
stdenv ファイルは、1 つ以上のレコードから構成されます。ここで
レコード は、z/OS UNIX ファイルの場合は <改行> 文字 (
X'15') で終了するストリングとして定義され、MVS データ・セットの場合は固定長または可変長 (非スパン) 形式レコードとして定義されます。
その他の MVS レコード・フォーマットは
stdenv ではサポートされていません。以下の規則が、
stdenv ファイル内の
環境変数の指定に適用されます。
- 環境変数は、1 レコード当たり 1 つだけ指定できます。
- それぞれの環境変数は、variable=value のように指定されます。
- 環境変数の名前は、ブランクで始まる名前を使用していない限り、列 1 から始まる必要があります。
- 環境変数レコードは、ヌル文字 (X'00') で終わってはなりません。
BPXBATCH は、自動的にヌル文字を各環境変数の終わりに追加します。したがって、プログラムから見た環境変数の長さにはヌル文字が含まれます。
- 末尾ブランク (X'40') は、MVS SYSIN データ・セットに対しては切り捨てられますが、その他のタイプのファイルに対しては切り捨てられません。
- MVS データ・セットは、環境変数の 1 部として扱われるため、シーケンス番号がないことに注意してください。ISPF 編集ユーザーは、環境変数を作成する際、SYSIN として指定した環境変数を持つ JCL データ・セットも含めて、常に番号モードをオフに設定しておく必要があります。
環境変数のなかにはリリースに依存するものもあります。環境変数をサポートしないシステムで BPXBATCH を実行すると、エラー・メッセージは出ず、変数は無視されます。uname シェル・コマンドを使用して、BPXBATCH を実行する
オペレーティング・システムのリリース番号を決めてください。
環境変数 (PATH を含む) は、実行可能プログラムの開始で確立されます。BPXBATCH それ自体のためではありません。したがって、PATH は、プログラムを見つけるために検索されるのではなく、プログラムが他の実行可能プログラムを起動するのに使用されます。次の例では、
someprogram は、PATH 環境変数の定義するディレクトリーではなく、ユーザーのプロファイルによって定義された初期作業ディレクトリーの中でだけ見つけることができます。
//jobname JOB …
//stepname EXEC PGM=BPXBATCH,PARM='PGM someprogram parm1 parm2'
//STDOUT DD PATH='/tmp/pgmout',PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=SIRWXU
//STDENV DD *
PATH=/bin:/u/usr/joeuser
STEPLIB=SYS1.JOE.STEPLIB
/*
- BPXBATCH は、stdenv によって指定される、実行に関する環境変数をさらに 2 つ使用します。
- _BPX_BATCH_UMASK=0755
- _BPX_BATCH_SPAWN=YES|NO
_BPX_BATCH_UMASK 環境変数によって、ユーザーは、デフォルトのマスクを使用する代わりに、新しく作成したファイルに関する許可ビットを柔軟に変更できるようになります (PGM を指定している場合)。
注: 'SH' オプション (SH はデフォルト) を指定して BPXBATCH を呼び出すと、この変数
は umask によって変更されます (通常は /etc/profile 内から設定されます)。SH によって BPXBATCH は、/etc/profile スクリプトを実行し (さらに、ユーザーの .profile を実行し)、予定したプログラムの実行前に umask を設定する可能性があるログイン・シェルを実行します。
_BPX_BATCH_SPAWN によって、BPXBATCH は fork/EXEC の代わり
に SPAWN を使用するようになり、生成されるプロセスにデータ定義が引き継がれる
ようになります。_BPX_BATCH_SPAWN を YES に設定すると
、spawn が使用されます。
NO に設定すると、デフォルトの動作と同様に、fork/exec を使用してプログラムを
実行します。
_BPX_BATCH_SPAWN を YES に設定した場合、spawn (BPX1SPN) に
影響を与える他の 2 つの環境変数について考慮する必要があります。
spawn の詳細については、「z/OS UNIX System Services プログラミング: アセンブラー呼び出し可能サービス 解説書」の BPX1SPN を
参照してください。
- BPXBATCH を SH パラメーターを指定して使用する際、stdenv DD で指定された環境変数は、/etc/profile および.profile (/etc/profile をオーバーライドする) で指定された環境変数によってオーバーライドされます。その理由は、SH によって、/etc/profile スクリプトを実行し、
ユーザーの .profile を実行するログイン・シェル
を BPXBATCH が実行するためです。
ファイル
- SYS1.LINKLIB(BPXMBATC) は、BPXBATCH プログラムのある場所です。
- stdin のデフォルトは /dev/null です。
- stdout のデフォルトは /dev/null です。
- stderr のデフォルトは stdout の値です。
すべてにデフォルトが使用される場合
は、stderr は /dev/null です。
- stdenv のデフォルトは /dev/null です。
BPXBATCH 戻りコード
- 0
- 処理は正常終了しました。
- 254
- 処理は失敗しました。BPXBATCH は OMVS の開始を必要とします。
- 255
- 処理は失敗しました。エラー・メッセージが出されました。
- 4095
- 処理は失敗しました。エラー・メッセージが出されました。
- 32000
- BPXBATCH は BPX1FRK (fork) 呼び出し可能サービスを起動しました。これは通常、TSO/E ユーザーによってのみ起動されます。以下の条件の 1 つが起こった可能性があります。
- BPXBATCH は、プログラムの fork の後で指定されたファイルのオープン
に失敗しました。ファイルは通常、fork の前に開かれてクローズされます。BPXBATCH の実行を再試行してください。
- program_name またはシェルが終了状況 125 で終了しました。
- 32512
- 以下の条件の 1 つが起きた可能性があります。
- 別の 256 の倍数
- 255 を超える
戻りコードは、BPXBATCH (32000 または 32512) からの戻りコードとして
明示的に文書化される場合を除き、
実際には BPXBATCH によって起動されたプログラムから戻される終了状況です。
終了状況は BPXYWAST の値を 256 で割ることによって求められます。
- BPXYWAST
- BPXBATCH は BPX1FRK (fork) 呼び出し可能サービスを起動しました。これは通常、TSO/E ユーザーによってのみ起動されます。処理は成功しました。待ち () 状況にゼロ以外の値が入っています。待ち状況は BPXYWAST によってマップされ、BPX1WAT (待ち) によって戻されました。
BPXBATCH によって出されたエラー・メッセージはありません。
戻りコードを設定するための一般的な規則
シェル・スクリプトを実行する際に、スクリプト自体に
set -o errexit をコードしている場合、ジョブ・ログはそのスクリプト内の失敗を反映する必要があります。
コマンド
set -o errexit は、非対話式シェルに、ERR トラップを実行し、次に終了するように指示します。
スクリプトがエラーを検出するとすぐに、シェル・スクリプトの処理は終了し、以下のようなコンソール・メッセージが表示される場合があります。
$HASP165 jobname ENDED AT PLPSC MAXCC=23
ジョブ・ログに、次のような行が見つかる場合があります。
IEF142I jobname *OMVSEX - STEP WAS EXECUTED - COND CODE 0023
スクリプトに set -o errexit がコーディングされていなければ、スクリプトはエラーを検出した場合でも実行し続け、スクリプトで発行される最後のシェル・コマンドが、ジョブ・ログに反映されます。
最後のシェル・コマンドが正常終了すると、MAXCC=00 が記録されます。
Return Codes < 128 は、コマンドの失敗を示します。
戻りコードの意味を判別するには、実行中のアプリケーション・スクリプトを調べることが必要です。
このスクリプトは、戻りコードを明示的に設定するか、またはスクリプト内の実行される最後のコマンドが、戻りコードと同じ終了状況になります。
Exit Status >= 128 の場合、処理はシグナルにより終了されました。
シグナル番号を取得するには、RC から 128 を引きます。
シグナル番号およびその機能のリストは、「z/OS UNIX System Services プログラミング: アセンブラー呼び出し可能サービス 解説書」にある z/OS UNIX のシグナルの表に記載されています。
例えば、戻りコードが 157 であれば、シグナル番号は 157-128 で、シグナルは 29 ということになります。
シグナル 29 は、SIGXCPU - CPU 時間制限の超過を意味します。
シェル・コマンド kill は、シグナル番号を検索するために使用できます。
nnn が戻りコードである場合、シェル・コマンド kill -l nnn はシグナル名を返します。
例えば、kill -l 157 は XCPU を返します。
内部および実際の戻りコードが BPXBATCH で発行される前に 256 で乗算される状況
- BPXBATCH は、TSO 環境内から実行されます。
- 環境変数 _BPX_BATCH_SPAWN=YES が設定されます。
(つまり、 Fork/Exec の代わりに spawn を使用します。)
- STDOUT または STDERR (あるいはその両方) が、MVS データ・セットまたは SYSOUT を指しています。
さまざまな環境での BPXBATCH 戻りコードの解釈の例
- OSHELL REXX exec は、TSO/E READY プロンプトから、非対話式シェル・コマンドを実行するために BPXBATCH を呼び出します。
tso oshell exit 255 を発行すると、結果は RC = 65280 となります。
値 65280 は、戻りコード 255 を 256 で乗算して設定されます (255 * 256 = 65280)。
- ジョブまたはジョブ・ステップの戻りコードは、4096 により除算された値の単なる余りである場合があります。
前の例で、戻りコードが 65280 であった場合、その戻りコードは 65280//4096 = 3840 と変換されます。
- BPXBATCH ジョブ (TSO の下で稼働していない) と、デフォルトの /dev/null または UNIX ファイルを指す STDOUT および STDERR がある状況では、戻りコードの設定方法と、ジョブ・ログに記載される可能性がある内容を決定するのは、環境変数 _BPX_BATCH_SPAWN です。
単純な UNIX コマンド
exit 3 を例とすると、戻りコードは次のようになります。
> BPXBATCH jobstep information for _BPX_BATCH_SPAWN=YES:
JOBNAME STEPNAME PROCSTEP RC
jobname OMVS 768
> BPXBATCH jobstep information for _BPX_BATCH_SPAWN=NO:
JOBNAME STEPNAME PROCSTEP RC
jobname OMVS 00
jobname *OMVSEX 00
jobname *OMVSEX 03
以下の例はすべて、SYSOUT を直接指す STDOUT および STDERR を使用する BPXBATCH を持つ環境から取られています。
_//OMVS EXEC PGM=BPXBATCH,PARM='SH sleep 300'
_//STDOUT DD SYSOUT=*,LRECL=137,RECFM=VB
_//STDERR DD SYSOUT=*,LRECL=137,RECFM=VB
ジョブを開始した後に、スリープ・プロセスがシグナルをジョブに送信して停止する場合があります。
> kill -s signame process
signame は、シグナル名です。
例えば、SIGUSR1 プロセスの USR1 は、プロセス ID です。
表 1 は、
kill コマンドを介してプロセスに送信されるシグナルと、ジョブ出力内の戻りコードをリストしています。
表 1. kill コマンドを介してプロセスに送信されるシグナルと、結果の戻りコードシグナル番号 |
シグナル名 |
計算 |
ジョブ戻りコード |
コメント |
1 |
HUP |
((128+01)*256)//4096 |
256 |
RC=1 の場合と同じ |
3 |
ABRT |
((128+03)*256)//4096 |
768 |
なし |
9 |
KILL |
((128+09)*256)//4096 |
2304 |
(**) |
14 |
ALRM |
((128+14)*256)//4096 |
3584 |
なし |
15 |
TERM |
((128+15)*256)//4096 |
3840 |
なし |
16 |
USR1 |
((128+16)*256)//4096 |
0 |
RC=0 であるが OK ではない |
17 |
USR2 |
((128+17)*256)//4096 |
256 |
シグナル 1 と同じ |
24 |
終了 |
((128+24)*256)//4096 |
2048 |
なし |
25 |
TSTP |
((128+25)*256)//4096 |
2304 |
シグナル 9 と同じ |
以下のいくつかの理由で、戻りコードから送信されたシグナルを解読することは困難です。
- シグナル 16 およびシグナル 32 は、通常、ジョブの正常終了を示す RC=0 となります。
- シグナル x およびシグナル x+16 は両方とも同じ戻りコードで終了します。一方のシグナルを他方のシグナルと区別することはできません。
例えば、シグナル 9 とシグナル 25 (9+16) は、両方とも RC = 2304 となります。
ただし、STDERR では、プロセス終了の原因となる実際のシグナルを示す以下の CEE メッセージが通常は表示されます。
CEE5208S The signal SIGname was received