TJESの紹介

本章では、TJESの特徴、コンポーネント、マルチノードのTJES構成、TJESシステムのブートとシャットダウン、およびTJESシステム・テーブルについて説明します。

1. 概要

OpenFrame TJES(Tmax Job Entry Subsystem、以下TJES)は、メインフレームのJESに対応するOpenFrameシステムのバッチ・ジョブ管理モジュールです。TJESは、マルチノード構成や自動化されたエラー回復をサポートするために、TmaxSoftのTPモニター製品であるTmax上に実装されています。

TJESは、富士通 MSPメインフレームのMSP JCLをUNIX上で最も忠実に再現するバッチ処理ソリューションです。また、検証されたミドルウェアによるマルチノード・クラスタリング機能により、UNIXシステムの性能限界を超え、大規模メインフレーム環境でも安定してリホスト可能な高いスケーラビリティを提供します。 TJESは、JCLを使用してユーザーからのジョブを受け取り、システムのリソース状況に合わせてスケジューリングしてランナーを使用して実行します。また、ジョブの実行状況の確認や実行結果の出力など、OpenFrameで実行されるジョブのすべてを管理します。

以下は、TJESの機能と特性です。

  • JCLを使用してジョブをサブミットします。

    • 富士通MSPメインフレームのJCLをサポート

    • CONTROL-M、A-AUTOなどの外部スケジューラーとの連携をサポート

    • インターナル・リーダー(内部読み取りプログラム)をサポート

    • エクスターナル・ライター(外部書き出しプログラム)をサポート

  • サブミットされたジョブをスケジューリングします。

    • ジョブ・クラス、ジョブの優先順位によるスケジューリング

    • マルチノード・スケジューリングをサポート

  • ジョブを出力します。

    • IBM印刷フォーマットをサポートするINFOPRINTを提供

本書は、ジョブの管理と実行、スプールの管理、ジョブの出力処理について説明します。また、TJESのコマンドとログ、エラーへの対応方法、TJES関連の環境設定についても説明します。

2. 特徴

TJESは、メインフレームのバッチ・プログラム(ユーティリティ、COBOLプログラム、PL/Iプログラム)の起動や、UNIXシェル・スクリプト、Cプログラムなど、UNIXで実行可能なすべてのプログラムを起動することができます。UNIXでシェル・スクリプトとcronを介してバッチ処理を実行する際、体系化されたジョブ・スケジューリングや容易な管理を提供します。

以下は、TJESが提供するバッチ・システムです。

  • ジョブ・クラスとランナー・クラスによるスケジューリング

  • ランナー・スロットの数を制限し、同時に実行できるバッチ・ジョブの数を制御

  • ジョブの進行状況と結果を確認

  • ジョブの一時停止、再開、停止およびジョブの属性を変更

  • 出力の管理

  • データセット・ロックによるデータ整合性を保証

  • TACFによるセキュリティの強化

3. TJESの構成

以下の図は、TJESの構成を示しています。

figure 1 1 rev3
TJESの構成

3.1. TJESのコンポーネント

  • obmjschd

    ジョブ・スケジューラーです。TJESのドメイン全体で1つのみ起動されます。TJESのジョブ・スケジューリングおよびジョブIDの発行や各ノードのブート状態を管理します。

  • ofrpmsvr

    プリンター管理サーバーです。TJESのドメイン全体で1つのみ起動されます。OUTPUTQに登録された出力を条件を満たすプリンターで出力します。

  • obmjhist

    ジョブ履歴サーバーです。TJESのドメイン全体で1つのみ起動されます。ジョブの状態を変更するすべてのアクション情報を保存します。

  • obmjmsvr

    ジョブ管理サーバーです。TJESのジョブと出力を管理および表示することができます。

  • obmjspbk

    スプール・バックアップ・サーバーです。TJESの1つのノードでのみ起動されます。実行済みのジョブをTJESから削除する際、そのジョブのスプールをバックアップします。また、バックアップされたスプールをTJESと同じ形式で表示することができます。

  • obmjinit

    ランナーとランナー・スロットの管理サーバーです。TJESの各ノードに1つずつ起動され、自身のノードに割り当てられたランナーとランナー・スロットを管理し、ジョブをランナーに割り当てます。

    障害発生などの原因により、Tmaxのフェイルオーバー機能によって自動的に再起動される場合、obmjinitは、すでにWORKINGまたはSUSPEND状態にあるジョブをSTOP状態に変更し、該当するランナー・プロセスを強制的に終了させます。一方、ユーザーが手動でobmjinitサーバーを再起動した場合でも、WORKING/SUSPEND状態のジョブをSTOP状態に変更する動作は同じですが、この場合ランナー・プロセスは自動的には終了されません。 これは、再起動のタイミングが明確でなく、対象のランナーのPID(プロセスID)が現在のシステム上の自プロセスであると確信できないため、ユーザーの判断に委ねるためです。

  • obmtscmd (optional)

    ISPFサービスでCLISTを実行する場合に、CLISTに記述されたTSOコマンドを処理するサーバーです。

    ISPFサービスを使用する環境でのみ提供されるサーバーです。ISPFサービスとJSON形式のデータをやり取りするので、Linux環境にjansson (jansson.h、libjansson.so)がインストールされている必要があります。

  • tjclrun

    JCLの実行モジュールです。JCLジョブをステップ順に実行します。

3.2. その他のOpenFrame製品

  • OpenFrame Base

    OpenFrame(OpenFrame AIM、OpenFrame Batch for MSP、OpenFrame Managerなど)を実行するための必須製品です。

    OpenFrame Baseは、非VSAM、TSAMなどのデータセットを提供し、カタログやデータセット・ロックなどを管理することができます。

    OpenFrame Baseについての詳細は、OpenFrame Base『Baseガイド』を参照してください。

  • OpenFrame TACF

    OpenFrameのセキュリティをサポートします。OpenFrame TJESはOpenFrame TACFと連携して、ユーザー認証、データセットやジョブ名などのリソースにアクセスするための権限チェックなどにおいて強力なセキュリティ機能を提供します。

    OpenFrame TACFについての詳細は、OpenFrame TACF『管理者ガイド』を参照してください。

3.3. TJESのリソース

  • ランナー・スロット

    ランナー・スロットは、ランナーの運用情報を保存する領域であり、1つのランナーに1つのランナー・スロットが割り当てられます。ランナーとobmjinitは、ランナー・スロットを介してデータを送受信します。ランナー・スロットは、obmjinitの起動時に生成され、終了時に削除されます。システム・テーブルのOFM_BATCH_RUNNERで実装されています。

  • スプール

    TJESが使用する特別なデータセットです。ジョブの実行に必要なリソースとジョブの進行状況や結果を保存するために使用されます。ジョブをサブミットすると、ジョブIDと同じ名前のディレクトリが生成されますが、そのディレクトリのサブディレクトリが使用されます。スプールを構成する情報は、設定に従ってスプール・ディレクトリのメンバーまたはシステム・テーブルで管理されます。ジョブ・スプールは、REMOVEコマンドまたはCANCELコマンドで削除できます。

  • TJESシステム・テーブル

    TJESが内部情報を保存するために使用するシステム・テーブルです。JOBQ、JESST、OUTPUTQがあります。詳細については、TJESシステム・テーブルを参照してください。

3.4. インターフェース

  • textrun

    サードパーティー・スケジューラーによってTJESにサブミットされたジョブの進行状況と結果をモニタリングできるモジュールです。UNIXでのサードパーティー・スケジューラーは、ジョブの開始と終了をプロセスの開始と終了とみなします。したがって、textrunは自身がサブミットしたジョブの実行が完了するまで終了されずに実行され、ジョブが終了すると、その結果を返して終了します。

  • tjesmgr

    システム管理者向けのコマンド・ベースのユーザー・インターフェースです。BOOTコマンドとSHUTDOWNコマンドを含むTJESのすべての機能を使用することができます。

  • OpenFrame Managerの[Batch]メニュー

    一般ユーザー向けのGUIのユーザー・インターフェースです。TJESシステムのブート、シャットダウンなどTJESの管理機能を除く、ジョブのサブミット、表示、管理機能を提供します。

3.5. 外部製品

  • 外部スケジューラー

    TJESは、ジョブ・クラスとジョブの優先順位によるスケジューリングのみサポートしており、ジョブ間の相関によるスケジューリングはサポートしていません。ジョブ間の相関によるスケジューリング、日間/週間/月間のバッチ処理など自動化されたジョブ・サブミットを実行する際には、外部スケジューラーを使用します。外部スケジューラーには、CONTROL-M、A-AUTOなどがあります。

4. マルチノードのTJES構成

TJESは、ジョブの処理性能やサービスの可用性を高めるために、複数のUNIXマシンを1つのマシンであるかのように使用できるマルチノード環境をサポートしています。本節では、TJESをマルチノードで構成する際、各コンポーネントの配置と動作方式について説明します。

以下の図は、2つのノードでTJESを構成した場合のコンポーネント・ダイアグラムです。

figure 1 2 rev2
マルチノード環境

TJESをマルチノードで構成するには、スプール、データセット、TSAMなどのデータ・ストレージ・リソースを共有する必要があります。TJESは、共有リソースを介して、複数のノードで同じデータセットを使用できるようにしたり、他のノードで実行されたジョブの結果を確認できるようにします。

NODE1のofrlmsvr、ofrsasvr、ofrpmsvr、obmjschd、obmjhist、obmjspbk、obmtsmgrは、ドメイン全体で1つのみ存在できるTmaxサーバーです。NODE1に問題が発生した場合は、Tmaxによって自動的にNODE2が起動(フェイルオーバー)されるため、サービスの可用性を高めることができます。

NODE1とNODE2の両方に存在するobmjmsvr、ofrdsedt、ofrlhsvr、ofruisvrは、マルチノード・サービスを提供するために各ノードに1つ以上存在する必要があり、obmjinitは、各ノードに1つのみ存在する必要があります。

tjclrunは、オンデマンド方式で実行されるプロセスなので、ノードごとに現在実行中のジョブ数と同数のtjclrunが存在し、実行中のジョブがない場合はtjclrunも存在しません。

obmjinitとtjclrunは、TJESランナー・スロットを介して情報を交換します。TJESランナー・スロットは、obmjinitの起動時に生成され、終了時に削除されます。

外部U/Iであるtextrun、OpenFrame Manager、tjesmgrは、Tmaxを介して全ノードに接続できます。

5. TJESのブートとシャットダウン

ジョブを実行するには、TJESがブート状態である必要があります。システム管理者は、tjesmgrのBOOTコマンドとSHUTDOWNコマンドを使用してTJESのブートとシャットダウンを制御するとこができます。

詳しい使用方法については、イニシエーター・コマンドBOOTSHUTDOWNを参照してください。

5.1. ブート

BOOTコマンドは、TJESがシャットダウンしている状態でのみ実行でき、すでにブートされている場合は無視されます。BOOTは、TJESの各ノードで自身のランナー・スロットを使用できる状態に初期化した後、TJESのobmjschdにランナー・スロットの現在の状態をレポートして、ジョブがスケジューリングされるようにします。

TJESが正常にブートされると、 SYS1.JESSTシステム・データセットに当該ノードがブートされたことが記録されます。これにより、データベースへの接続失敗などの障害が発生した場合、TJESの自動復旧プロセスでブート状態が維持されます。

マルチノードのTJES環境では、TJESのブート時にTJESの全ドメインに属するすべてのノードにBOOTコマンドを送信します。また、各ノードごとにブートすることもできます。

ブート時に該当のノードのランナー・スロットは、DOWENDからDOWN状態になる前のACTIVEまたはINACTIVE状態で復旧されます。ブートされたことがない場合は、tjesサブジェクトのINITDEFセクションに設定されたデフォルト状態で復旧されます。

5.2. ウォームブートとコールドブート

  • ウォームブート(WarmBoot)

    システムを初期化した後、運用中に使用する一般的な起動方法です。TJESランナー・スロット・テーブルを初期化し、スケジューラーにランナー・スロットの現在の状態をレポートしてジョブ・スケジューリングが実行されるようにします。tjesmgrBOOTコマンドを使用します。

  • コールドブート(ColdBoot)

    OpenFrame TJESを初期化するための特殊な起動方法です。tjesinitツールを使用してシステム・テーブルを初期化します。コールドブートを実行した後、実際にジョブを実行するためにはウォームブートを実行する必要があります。

    以下の場合に、コールドブートを実行します。

    • OpenFrame TJESのインストール後

    • システム・テーブル内容の変更など、主要システムのアップグレード後

    • OpenFrame環境設定のtjesサブジェクトの次のような変更をシステムに適用する際

      • JOBDEFセクションのJOBNUMの範囲の変更後

      • JOBCLASSセクションの変更後

      • OUTDEFセクションのOUTNUMの範囲の変更後

tjesinitツールの詳細については、OpenFrame Batch『ツールリファレンスガイド』の「tjesinit」を参照してください。

5.3. シャットダウン

SHUTDOWNコマンドは、obmjinitがブートされている状態でのみ実行できます。すでにシャットダウンしている状態では無視されます。SHUTDOWNコマンドが実行されると、TJESは該当のノードの状態を「Not booted」に変更し、システムのシャットダウン後に発生される追加的なジョブのスケジューリングを制限します。

シャットダウンされる前にスケジューリングされ実行中のジョブは、一応終了されるまで正常に実行されますが、ユーザーが強制終了を明示した場合は、SHUTDOWNコマンドの実行と同時に中止されます。

実行中のジョブをすべて終了してからシステムをシャットダウンさせる場合は、STOPコマンドを使用して実行中のジョブを終了した後、SHUTDOWNコマンドを使用してTJESシステムをシャットダウンします。

TJESが正常にシャットダウンしたら、SYS1.JESSTシステム・データセットに当該ノードがシャットダウンされたことを記録します。これにより、データベースへの接続失敗などの障害が発生した場合、TJESの自動復旧プロセスでシャットダウン状態が維持されます。

マルチノードのTJES環境では、TJESがシャットダウンされるとき、TJESの全ドメインに属するすべてのノードにSHUTDOWNコマンドを送信します。また、各ノードごとにシステムをシャットダウンすることもできます。

  • システム全体をシャットダウンするコマンド

     shutdown
  • 各システムごとにシャットダウンするコマンド

     shutdown node=nodename

SHUTDOWNコマンドが実行されたノードの各ランナー・スロットはDOWEND状態に変更されます。実行中のジョブがある場合はランナー・スロットをWORKING状態で維持し、ジョブの実行が終了されたらDOWEND状態に変更します。

6. TJESシステム・テーブル

TJESでは、ノード間でシステム設定と各種リソースの情報を共有するため、システム・テーブルに保存しています。

6.1. JESST

TJESのシステム・レベル情報(JESST)は、そのタイプに応じて3つのシステム・テーブル(OFM_BATCH_JESST、OFM_BATCH_JCLSST、OFM_BATCH_NODEST)に保存されます。

システム・レベル情報 説明

ノード情報

システムに存在するノードの名前と各ノードのブート状態をシステム・テーブルのOFM_BATCH_NODESTに保存します。

JOBID情報

ジョブIDの範囲と最後のジョブIDなどの情報をシステム・テーブルのOFM_BATCH_JESSTに保存します。

OUTPUTQ情報

OUTPUTQの情報(OUTPUTQのサイズなど)をシステム・テーブルのOFM_BATCH_JESSTに保存します。

JOB CLASS情報

各ジョブ・クラスの基本属性情報をシステム・テーブルのOFM_BATCH_JCLSSTに保存します。

  1. JESSTの表には、OFM_BATCH_JESST、OFM_BATCH_JCLSST、OFM_BATCH_NODESTがあります。この3つの表は、OpenFrameのインストール時にインストールされる必要があります。

  2. コールドブート中に記録されるJESSTシステム・テーブルのJOBID、OUTPUTQ情報は、tjesinitツールによってのみ更新されます。以降、OpenFrame環境設定のtjesサブジェクトを変更した場合は、tjesinitを使用してシステム・テーブルに変更内容を反映する必要があります。

6.2. JOBQ

TJESではジョブを管理するために必要な情報を保存するシステム・テーブルであり、実際のテーブル名はOFM_BATCH_JOBQです。

JOBQには、JOBID、JOBNAME、JOBCLASS、JOBPRTY、JOBSTATUS、JCLPATH、USER ACCOUNT などの情報が保存されます。JOBIDには基本インデックスが設定されています。

6.3. OUTPUTQ

TJESで実行されたジョブの出力結果であるOUTPUTを管理するために必要な情報を保存するシステム・テーブルであり、実際のテーブル名はOFM_BATCH_OUTPUTQです。

OUTPUTQには、OUTPUTID、JOBID、JOBNAMEなどのOUTPUTを検索および管理するための情報や、データファイルのパス、OUTPUTクラス、OUTPUT DISPなど実際の出力に必要な情報が保存されます。

TJESで使用されるすべてのシステムテーブルは、OpenFrameをインストールする際にbatchinitツールを使用してインストールされます。batchinitの実行に関しては、OpenFrame Batch『ツールリファレンスガイド』の「batchinit」を参照してください。

OpenFrameを初めてインストールした後は、tmbootを実行する前に、OpenFrameが提供するコールドブート用のUNIXツールであるtjesinitを使用してシステムテーブルを初期化する必要があります。