REXX チェックの基本事項

System REXX サービスを使用すると、インストール情報を収集して問題点を探すための REXX チェックを作成できます。このチェックでは、データ・セットを読み取り、AXRCMD 関数を使用してシステム・コマンドを発行し、その出力を調べてチェック結果をメッセージに出力するのが一般的です。 また、IBM Health Checker for z/OS はチェック例外メッセージを WTO として作成することもできます。

REXX チェックは、System REXX で定義されている APF 許可の環境での System REXX アドレス・スペース内で実行します。

TSO 環境および非 TSO 環境用 REXX チェックを作成できます。 TSO 環境用のチェックを作成すると、動的な TSO 作業環境が得られます。 また、これによってチェック・ルーチン自体が確実に単一アドレス・スペースで実行されるようになるため、非常にセキュアです。 SYS1.SAMPLIB のサンプルの HZSSXCHK に、TSO 環境用および非 TSO 環境用両方のチェックのコードを示しています。

z/OS® での REXX exec の作成および実行について詳しくは、「z/OS MVS Programming: Authorized Assembler Services Guide」の『System REXX』を参照してください。

REXX チェックはできるだけ単純なものにすることをお勧めします。 概略的に言えば、REXX チェックは次のステップで構成されます。
  1. HZSLSTRT 関数を呼び出して、exec が実行を開始済みであることを示し、HZSPQE データ域の一部のチェック情報を REXX 変数に配置します。
  2. チェック定義の IBM® Health Checker for z/OS で設定されている HZS_PQE_ENTRY_CODE REXX 変数を参照し、exec が複数の REXX チェックを含む場合に呼び出される REXX チェックを識別します。
  3. REXX チェックの処理を開始します。
  4. 必要に応じて、IBM Health Checker for z/OS で設定される機能コード (HZS_PQE_FUNCTION_CODE にある) を調べます。 この機能コードが、REXX チェックの初回の反復であることを表す INITRUN である場合、REXX チェックは HZS_PQE_CHKWORK フィールドを NULL に設定します。また、REXX チェックでは、必要なセットアップがある場合は実行する必要があります。
  5. REXX チェックでは、システムがパラメーター・データが変更されたことを示したときに、REXX チェック用の入力パラメーターがある場合はそれを確認する必要があります。 HZSLSTRT REXX 関数の出力変数 HZS_PQE_LOOKATPARMS を使用して、REXX チェックが前回実行されてからチェック・パラメーターが変更されたかどうかを確認します。 (チェック・パラメーターは、HZSLSTRT 出力変数 HZS_PQE_PARMAREA に含まれています。) HZS_PQE_LOOKATPARMS 変数が ON に設定されている場合、REXX チェックが前回実行されてからチェック・パラメーターが変更されたことを示します。 HZSLFMSG REXX 関数の入力変数を使用して、REXX チェックが検出したパラメーター・エラーを報告します。 HZSLFMSG 関数を参照してください。
  6. ここからが REXX チェックの中心部分、つまり、システム上の潜在的問題の検査です。
  7. HZSLFMSG 関数を使用して、メッセージを出すか、またはパラメーターおよび REXX チェックで発生するその他のエラーを処理します。 HZSLFMSG は、HZSFMSG マクロに対するインターフェースです。 HZSFMSG マクロ - フォーマット済みチェック・メッセージの発行を参照してください。 さらに HZSLFMSG では、REXX チェックの状況を設定または変更します。
  8. HZSLSTOP 関数を呼び出し、REXX チェックの実行が完了したことを示します。

REXX チェックは System REXX が稼働中である場合のみ実行: これらのチェックは System REXX アドレス・スペースで実行されているため、System REXX が使用可能でない場合、REXX チェックは実行されません。 REXX チェックを追加するには、IBM Health Checker for z/OS に対する REXX チェックの定義を参照してください。

REXX チェックの環境の定義: REXX チェックは System REXX で定義され制御されている環境の System REXX アドレス・スペースで実行されます。 IBM Health Checker for z/OS は、AXREXX サービスを使用して REXX チェックを実行します。 REXX チェックは、IBM Health Checker for z/OS のプロシージャー hzsproc に割り当てられているセキュリティーのもとで実行されます。 詳細については、「z/OS MVS Programming: Authorized Assembler Services Guide」の『System REXX』を参照してください。

システムは、REXX チェックのメッセージ・テーブルを IBM Health Checker for z/OS アドレス・スペースにロードします。

すべての REXX チェックが開始時に使用する情報: IBM Health Checker for z/OS が REXX チェックを呼び出す場合、REXX チェックが使用する次の HZSLSTART 関数変数を設定します。
REXX チェックでは、1 つの設定または 1 つの潜在的問題のみを調べるように限定してください。 REXX チェックの有効範囲を限定すれば、インストール先で REXX チェックを使用して、次のことを簡単に行うことができるようになります。

REXX チェックに戻りコードを設定してはならない: IBM Health Checker for z/OS は、REXX チェックで設定されるいかなる戻りコードも無視します。 HZSLFMSG 関数を使用する場合、システムは RESULT 変数および HZSLFMSG_RSN 変数に情報を返します。

2K チェック作業域の使用: 2K チェック作業域 (HZSLSTRT 関数によって使用可能になる HZS_PQE_CHKWORK 変数) は、REXX チェックの存続期間中のすべてのチェック反復にわたって保存しておきたいデータを保持するために使用してください。 システムは、INITRUN 機能コード呼び出しの前に 2K 作業域を NULL に設定します。 HZS_PQE_CHKWORK 変数は、REXX チェックが書き込みを行う必要のある唯一の HZSLSTRT 変数です。 REXX チェックが HZSLSTOP System REXX 関数を呼び出す場合、システムは HZS_PQE_CHKWORK の内容を保存します。また、次のいずれかが発生した場合は、その領域を NULL に設定します。

例えば、データ・セットの割り振りなど REXX チェックで追加のリソースを取得する場合、REXX チェックは完了する前にこれらのリソースを解放する必要があります。 REXX チェックは、ローカル・チェックと異なり、クリーンアップまたは削除のために呼び出されることはありません。したがって、REXX チェックを再度実行する場合、そのアドレス・スペースまたは同一のタスクで実行される保証はありません。 また、REXX チェックはタイムアウトまたは取り消しなどの例外以外の状態が発生したときにもリソースを解放する必要があります。

IBM Health Checker for z/OS の System REXX 関数の使用: 次に示す System REXX 関数を REXX チェックで使用します。 いずれかの HZSLxxxx 関数が戻りコード 8 以上で失敗した場合、チェックはエラーとしてマークされることに注意してください。 エラーの原因を判別するには、IBM Health Checker for z/OS の System REXX 関数の個々の HZSLxxxx 関数からの戻りコードを参照してください。

すべての REXX 関数は戻りコード (RESULT 変数) および理由コード (HZSLnnnn_RSN 変数) を返します。 また、これらの関数は他の多くの役立つ入力変数および出力変数を含みます。 これらの関数に関する詳細説明については、IBM Health Checker for z/OS の System REXX 関数を参照してください。

グループ化された REXX チェックに対する個々の入り口コードの提供: 複数の REXX チェックが単一の REXX exec を使用することができます。これを実行する場合でも、個々の REXX チェックは独自の HZSPQE 領域を取得します。そのため、個々のチェックに対する固有の入り口コードを定義する必要があります。 これにより、各 REXX チェックの REXXIN および REXXOUT データ・セットが固有になります。つまり、システムがデータ・セット名の接尾辞で入り口コードを使用します。 REXX チェックが HZSLSTART 関数の HZS_PQE_ENTRY_CODE 変数に入れて渡される入り口コードを見つけて、そこに示されている REXX チェックの処理に制御を渡すように、コーディングしてください。 HZSADDCK 呼び出しまたは HZSPRMxx parmlib メンバーにおけるチェック定義の ENTRYCODE パラメーターを使用して各 REXX チェックの入り口コードを定義します。IBM Health Checker for z/OS は、ユーザーが REXX チェックに対して定義する入り口コードの固有性を検査しないということに注意してください。

次の例では、REXX チェックが入り口コードを使用して個々のチェックに制御を渡す方法を示します。
/*********************************************************************/
/* Check the entry code to determine which check to process          */
/*********************************************************************/
 IF HZS_PQE_ENTRY_CODE = 1 THEN
   DO
     Call Process_HZS_SAMPLE_REXXIN_CHECK
   END
 IF HZS_PQE_ENTRY_CODE = 2 THEN
   DO
     Call Process_HZS_SAMPLE_REXXTSO_CHECK
   END
 EXIT
HZSADDCHECK 出口ルーチンを使用してシステムに REXX チェックを追加する場合も、1 つの出口ルーチンを使用して、関係する複数のチェックをシステムに追加するようにしてください。 IBM Health Checker for z/OS に対する REXX チェックの定義を参照してください。

個々の REXX チェック間で通信を行おうとしないでください。 すべての REXX チェックを同じ exec に入れた場合でも、それらのチェック間の通信に依存することがないようにしてください。 各 REXX チェックは独立して機能することを目的としており、固有の重大度、理由、パラメーター、HZSPQE データ域および入り口コードを持っています。