REXXからバッチジョブをサブミットして実行後のジョブログを読み込む

REXXは、外部(環境)コマンドによってデータセットなどのMVSリソースだけでなく様々なリソースにもアクセスすることができます。SDSFを呼び出すことで、スプールにアクセスしてジョブログなどのSYSOUTデータセットにアクセスすることもできます。以下は、バッチジョブをサブミットしてジョブログを読み込み、最後にMVSコマンド「D△A,L」を発行するプログラム・サンプルです。REXXからTSOコマンド、SDSFホスト・コマンドおよびUSSのsyscallコマンドを使用しています。

REXXからSDSFを呼び出すには、用途に応じてISFEXEC、ISFBROWSEやISFSLASHなどのSDSFホスト・コマンドを実行します。DAやSTなどのSDSFパネル相当の機能ならISFEXEC、SYSOUTデータセットを読み込むにはISFBROWSE、オペレーター・コマンドの発行ならISFSLASHです。

①ジョブ状況リストの取得

ADDRESS SDSF “ISFEXEC ST”によってSDSF/STパネルの情報を取得できます。STパネルの各項目に対応した配列変数にジョブ毎の内容が格納されて返ります。サンプルでは、ジョブ・リストのフィルターとしてTSOのuseridをisfowner(Owner名)を指定して絞り込み、isfcols変数にJNAME(ジョブ名)、JOBID(ジョブID)、RETCODE(MAX-RC)、OWNERID(Owner名)、QUEUE(置かれているキュー)の項目だけを指定して取得しています。リストされたジョブ数はisfrows変数に格納されます。各項目内容の内、表示するジョブ名、ジョブID、MAX-RCおよびQUEUEの内容を、それぞれjname、jobid、retcode、queueに要素番号を指定して取り出して、標準出力に出力しています。

②JCLサブミットと実行結果の取得

ジョブのサブミットは、ADDRESS TSO “SUBMIT JCL(JCLRUN)”で行うことができます。SUBMITコマンドは「IKJ56250I JOB jobname(JOBnnnnn) SUBMITTED」のメッセージを返すので、そこから文字列処理でジョブIDの8文字を抜き出します。このジョブIDは、後続のSYSOUTデータセット読み込み処理で使用します。サブミット後、1秒間隔でADDRESS SDSF “ISFEXEC ST”を実行し、サブミットしたジョブが「PRINT」キューに入るまで同期合わせをします。サブミットしたジョブの実行が終了したら、ADDRESS SDSF “ISFBROWSE ST TOKEN(‘”token.ix”‘)”を実行してジョブ全体のSYSOUTを読み込みます。TSOフォアグラウンド・セッションで実行された場合は、読み込んだSYSOUTレコードをスタックに積んでEXECIOでPSデータセットに書き出してからISPFブラウザーを起動して表示します。フォアグラウンド・セッション以外で実行された場合は、標準出力に表示します。

③オペレーター・コマンドの発行

最後にMVSの「D△A,L」コマンドを発行して終了します(コマンドの実行結果も配列変数に格納されるので、その内容を標準出力に表示します)

以下が、ISPFコマンドシェルから実行した結果です(左右スクロール有り)。TSOのフォアグラウンド・セッションで実行された場合は、コピーされた出力側のデータセット内容をISPFブラウザーを起動して表示しています。REXXならISPFユーティリティーの呼び出しも簡単です。

以下は、TSOのバッチセッションから実行した結果です(左右スクロール有り)。USSシェルからdorexx(*1)経由でMVS側REXXを実行しても同様の出力が行われます。サブミットしたジョブのSYSOUTを、ISPFブラウザーではなく標準出力(SYSTSPRTやSTDOUT)に表示しています。実際には、MVS側のバッチジョブをサブミットするプログラムをわざわざバッチ処理で実行することはないでしょう。
USS側からであれば、ちょっとした処理ならいちいちTSOログオンしなくてもMVS側のバッチジョブの状況をモニターしたりMVSやJES2コマンドを実行することができます。USSをメインに使いたい人であれば、新たにREXXを覚えなくてもシェル・スクリプトやPythonとZOAUの組み合わせがより簡単かも知れませんが、REXXであればPythonやZOAUを別途インストールしたり購入したりする必要がありません。


*1 dorexxについては「REXXからMVSデータセットにアクセスする」を参照。

以下は、USSシェルからdorexx経由でMVS側REXXを実行した結果です。MVS側で実行したSAY命令の出力は、USSシェル側の標準出力(STDOUT)にリダイレクトされます。

関連マニュアル、資料

  • z/OS TSO/E REXX 解説書(SA88-5453)
  • z/OS TSO/E REXX ユーザーズ・ガイド(SA88-8636)
  • z/OS SDSF ユーザーズ・ガイド(SC43-4152)
  • z/OS REXXおよびz/OS UNIX System Servicesの使い方(SA88-8644)
  • IBM Redbook:Implementing REXX Support in SDSF(SG24-7419)