STCとバッチJOBでJCLを共用する方法

同じJCLをある時はJOBとして、またある時はSTCタスクとして起動方法を使い分けることもできます(ESA V5以降のMVSでサポートされます)

従来STCタスクを起動する場合は、その起動用プロシージャーをシステム・プロシージャー・ライブラリーに登録しました。プロシージャ自身はSTARTコマンドで直接STCタスクとして実行するか、他のジョブJCLから呼び出して実行する必要がありました。しかし、現在ではマスタースケジューラーの起動プロシージャであるMSTJCLnn(SYS1.PARMLIBに入っている)にIEFJOBS DDステートメントを定義することで、そこで指定された区分データセット内のジョブ用JCLメンバーをSTARTコマンドで直接実行することができます。また、そのメンバーをSTARTコマンドでなくJES2にサブミットすればJOBとして実行することもできます。STARTコマンドでSTCタスクとして実行した時のジョブ名は、JCLのJOBステートメントに指定されている名前になります。IEFJOBSに登録する場合、JCLはJOBステートメントを使用してあくまでも通常のJOB用に作ります。PROCステートメントで始めてはなりません。

JES2が起動された後、同じ名前のメンバーがIEFJOBSとJES2のPROC00の両方にあればIEFJOBS側が使用されます。この方法だと、STCタスクであってもストリーム内データ(DD *)が利用できます。STCタスクで動かすが、SYSINデータをDD *で直接指定できればなぁって思ったことはありませんか?(*1)

詳細は、z/OS MVS JCL解説書の「開始済みタスクのソースJCL の決定」に載っています。


*1 z/OS V1R13からは、カタログ・プロシージャー内にもDD *ステートメントを定義できるようになっている。