Sun Java System Messaging Server 6 2005Q4 管理ガイド

ジョブコントローラファイル

ジョブコントローラは、メッセージを配信するためのチャネルジョブを作成および管理します。これらのチャネルジョブは、ジョブコントローラ内の処理プール内で実行されます。プールは、チャネルジョブが実行される「場所」であると考えることができます。プールは、プール外のジョブとリソースを奪い合うことなく処理できる計算領域です。ジョブコントローラの概念とチャネルキーワードの設定については、「ジョブコントローラ」「チャネル実行ジョブの処理プール」、および 「サービスジョブの制限」を参照してください。

ジョブコントローラファイル job_controller.cnf では、次のチャネル処理情報を指定します。

imta.cnf ファイルでは、pool キーワードを使ってプロセスプール (job_controller.cnf で定義) の名前を指定します。たとえば、次のサンプルファイル job_controller.cnf の要素は、プール MY_POOL を定義します。

[POOL=MY_POOL]
job_limit = 12

次のサンプルファイル imta.cnf の要素は、チャネルブロック内でプール MY_POOL を指定します。

channel_x pool MY_POOL
channel_x-daemon

デフォルトのプール設定に関連付けられたパラメータを変更したり、プールを追加する場合は、job_controller.cnf ファイルを編集し、ジョブコントローラをいったん終了してから再起動してください。

ジョブコントローラ設定ファイルの最初のプールは、プール名が指定されていないすべての要求に使用されます。MTA 設定ファイル (imta.cnf) で定義されている MTA チャネルは、後ろにプール名が続く pool チャネルキーワードを使って、特定のプールに処理要求を送ることができます。このプール名は、ジョブコントローラ設定のプール名と一致しなければなりません。ジョブコントローラが要求されたプール名を認識できない場合、その要求は無視されます。

最初の設定で、次のプールを定義します。DEFAULTLOCAL_POOLIMS_POOLSMTP_POOL

使用例

通常、特定のチャネルの処理を別のチャネルの処理と区別する場合は、ジョブコントローラ設定に付加的なプール定義を追加します。また、特性が異なるプールを使用することもできます。たとえば、チャネルが処理できる同時要求の数を制御する必要があるとします。これを行うには、ジョブ範囲を設定した新規プールを作成し、pool チャネルキーワードを使ってチャネルをより適切なプールに割り当てます。

プール定義のほかに、ジョブコントローラ設定ファイルには、各チャネルの要求を処理するのに必要な MTA チャネルとコマンドのテーブルが含まれています。要求には「マスター」と「スレーブ」の 2 種類があります。一般に、チャネルマスタープログラムは、そのチャネルの MTA メッセージキューにメッセージが保存されている場合に呼び出されます。マスタープログラムは、メッセージをキューから取り出します。

スレーブプログラムは、チャネルをポーリングし、そのチャネル内の受信メッセージを取り込むために呼び出されます。マスタープログラムはほぼすべての MTA チャネルにありますが、スレーブプログラムは MTA チャネルにはほとんどなく、必要とされません。たとえば、TCP/IP を介して SMTP を処理するチャネルではスレーブプログラムは使用されません。これは、すべての SMTP サーバーからの要求に応じて、ネットワークサービスである SMTP サーバーが着信 SMTP メッセージを受け取るためです。SMTP チャネルのマスタープログラムは、MTA の SMTP クライアントです。

チャネルに関連付けられた宛先システムが一度に複数のメッセージを処理できない場合は、ジョブ範囲が 1 である新しいタイプのプールを作成する必要があります。

[POOL=single_job]
job_limit=1

一方、宛先システムで並行処理が可能な場合は、ジョブ範囲の値を増やすことができます。

例 10–1 に、ジョブコントローラ設定ファイルの例を示します。表 10–6 に、使用可能なオプションを示します。


例 10–1 ジョブコントローラ設定ファイルの例 (UNIX)


! MTA ジョブコントローラ設定ファイル
!
! グローバルデフォルト
tcp_port=27442         (1)
secret=never mind
slave_command=NULL     (2)
max_life_age=3600      (3)
!
!
! プールの定義
!
[POOL=DEFAULT]         (4)
job_limit=10           (5)
!
[POOL=LOCAL_POOL]
job_limit=10
!
[POOL=IMS_POOL]
job_limit=1
!
[POOL=SMTP_POOL]
job_limit=1
!
! チャネルの定義
!
!
[CHANNEL=l]             (6)
master_command=msg_svr_base/lib/l_master
!
[CHANNEL=ims-ms]
master_command=msg_svr_base/lib/ims_master
!
[CHANNEL=tcp_*]         (7)
anon_host=0
master_command=msg_svr_base/lib/tcp_smtp_client

以下に、上の例の主な項目 (太字の丸括弧付きの数字がある部分) について説明します。

  1. このグルーバルオプションは、ジョブコントローラが要求を待機する TCP ポート番号を定義します。

  2. そのあとの [CHANNEL] セクションのデフォルト SLAVE_COMMAND を設定します。

  3. そのあとの [CHANNEL] セクションのデフォルト MAX_LIFE_AGE を設定します。

  4. この [POOL] セクションは、DEFAULT という名前のプールを定義します。

  5. このプールの JOB_LIMIT10 に設定します。

  6. この [CHANNEL] セクションは、l という名前のチャネル (UNIX ローカルチャネル) に適用されます。このセクションに必要な定義は、ジョブコントローラがこの チャネルを実行するために発行する master_command だけです。このチャネル名にはワイルドカードが含まれていないため、チャネル名は完全に一致しなければなりません。

  7. この [CHANNEL] セクションは、tcp_* で始まるすべてのチャネル名に適用されます。このチャネル名にはワイルドカードが含まれているため、tcp_ で始まるすべてのチャネルに一致します。

追加プールの例

ジョブコントローラは、メッセージを配信するためのチャネルジョブを作成および管理します。これらのチャネルジョブは、ジョブコントローラ内の処理プール内で実行されます。プールは、チャネルジョブが実行される「場所」であると考えることができます。プールは、プール外のジョブとリソースを奪い合うことなく処理できる計算領域です。ジョブ範囲は、job_controller にプールごとに設定されます。たとえば、SMTP_POOLjob_limit を 10 と定義すれば、このプールで実行できる tcp_smtp クライアントプロセスは常に 10 個だけです。

tcp_* チャネルを追加する必要があることもあります。たとえば、メール処理が非常に遅いサイト用の tcp チャネルなどです。このようなチャネルは別のプールで実行することをお勧めします。理由は、tcp_* チャネルを 10 個作成し、SMTP_POOL ですべてを実行する場合は、tcp_* チャネルごとに常に 1 つの tcp_smtp クライアントだけを実行することが可能であるからです (ただし、メールの宛先がすべて tcp_* チャネルであり、SMTP_POOL10 個の job_limit で定義されている場合)。システムに大きな負荷があり、どのキューにも複数の tcp_* チャネル宛の待機メッセージがある場合は、十分ではありません。スロットが競合しないように、新しい tcp_* チャネルに別のプールを定義することも考えられます。

たとえば、次の tcp_* チャネルを設定する場合を考えてみます。


tcp_yahoo smtp mx pool yahoo_pool keyword keyword keyword
tcp-yahoo-daemon

tcp_aol smtp mx keyword keyword keyword pool aol_pool
tcp-aol-daemon

tcp_hotmail smtp mx pool hotmail_pool keyword keyword keyword 
tcp-hotmail-daemon
...
tcp_sun smtp mx pool sun_pool keyword keyword keyword
tcp-sun-daemon

新規チャネルごとに 10 個の tcp_smtp_client 処理を追加するには、job_controller.cnf ファイルに次のように追加します。


[POOL=yahoo_pool]
job_limit=10

[POOL=aol_pool]
job_limit=10

[POOL=hotmail_pool]
job_limit=10

 ...

[POOL=sun_pool]
job_limit=10

プールの詳細については、「チャネル実行ジョブの処理プール」を参照してください。『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。

表 10–6 ジョブコントローラ設定ファイルのオプション

オプション 

説明 

一般的なオプション 

説明 

INTERFACE_ADDRESS=adapter

ジョブコントローラがバインドする IP アドレスインタフェースを指定します。値 (アダプタ) には、ANYALLLOCALHOST、または IP アドレスのいずれかを指定できます。デフォルトで、ジョブコントローラはすべてのアドレスにバインドします (ALL または ANY の指定に相当)。INTERFACE_ADDRESS=LOCALHOST を指定すると、ジョブコントローラは、ローカルマシンからの接続しか受け付けられません。これは、ジョブコントローラではマシン間の操作はサポートされていないため、通常の操作には影響がありません。ただし、HA エージェントがジョブコントローラの応答をチェックする HA 環境では、不適切かもしれません。Messaging Server の実行しているマシンが HA 環境にあり、「内部ネットワーク」アダプタと「外部ネットワーク」アダプタを持っている場合で、大きなポート番号への接続をブロックするファイアウォール機能の信頼性が低い場合は、「内部ネットワーク」アダプタの IP アドレスを指定することをお勧めします。

MAX_MESSAGES=integer

ジョブコントローラは、メモリ内構造でメッセージに関する情報を保持します。バックログが大きくなった場合は、この構造のサイズを制限する必要があります。バックログのメッセージ数がこのパラメータ値を超えると、その後のメッセージに関する情報はメモリに保存されません。メールメッセージは常にディスクに書き込まれるため、失われることはありませんが、ジョブコントローラが認識するメッセージ数がこの値の半分になるまで配信されません。この時点では、ジョブコントローラが imsimta cache -sync コマンドを模倣してプールディレクトリをスキャンします。

デフォルトは 100000 です。 

SECRET=file_spec

ジョブコントローラに送信される要求を保護するための共有の秘密情報です。 

SYNCH_TIME=time_spec

ジョブコントローラは定期的にディスク上のプールファイルをスキャンしてファイルが不足していないかどうかをチェックします。デフォルトでは 4 時間ごとにスキャンされます (ジョブコントローラが起動してから 4 時間ごと)。time_spec のフォーマットは HH:MM/hh:mm または /hh:mmhh.mm 変数は、イベントの間隔を時間数 (h) と分数 (m) で示します。HH:MM 変数は、1 日の中でイベントが最初に発生する時間です。たとえば 15:45/7:15 と指定すると、15:45 にイベントが開始し、その後 7 時間 15 分ごとにイベントが実行されます。

TCP_PORT=integer

ジョブコントローラが要求パケットをリッスンする TCP ポートを指定します。このオプションは、デフォルト値がシステム内の別の TCP アプリケーションと競合しないかぎり変更しないでください。このオプションを変更する必要がある場合は、対応する MTA テイラーファイル (msg_svr_base/config/imta_tailor) の IMTA_JBC_SERVICE オプションも同じように変更する必要があります。TCP_PORT オプションはグローバルに適用され、[CHANNEL] セクションまたは [POOL] セクション内にある場合は無視されます。

プールオプション

説明

JOB_LIMIT=integer

プールが同時に使用できるプロセスの最大数を指定します。JOB_LIMIT は各プールに個別に適用されます。ジョブの最大合計数は、すべてのプールの JOB_LIMIT パラメータの合計数です。この値をセクションの外に設定すると、JOB_LIMIT が指定されていない [POOL] セクションにより、デフォルトとして使用されます。このオプションは、[CHANNEL] セクション内では無視されます。

チャネルオプション

説明

MASTER_COMMAND=file_spec

チャネルを実行し、そのチャネルからメッセージを取り出すために、ジョブコントローラによって作成された UNIX システムプロセスが実行するコマンドのフルパスを指定します。この値をセクションの外に設定すると、MASTER_COMMAND が指定されていない [CHANNEL] セクションにより、デフォルトとして使用されます。[POOL] セクション内では、このオプションが無視されます。

MAX_LIFE_AGE=integer

チャネルマスタージョブに対する最大のライフタイムを秒数で指定します。このパラメータがチャネルに指定されていない場合は、グローバルなデフォルト値が使用されます。デフォルト値が指定されていない場合は、14400 (240 分) が使用されます。 

MAX_LIFE_CONNS=integer

マスターチャネルの寿命は、最長使用期間パラメータのほか、メッセージがあるかどうかをジョブコントローラに確認する回数によっても制限されます。このパラメータがチャネルに指定されていない場合は、グローバルなデフォルト値が使用されます。デフォルト値が指定されていない場合は 300 が使用されます。 

SLAVE_COMMAND=file_spec

チャネルを実行し、そのチャネルに入れるメッセージをポーリングするために、ジョブコントローラによって作成された UNIX システムプロセスが実行するコマンドのフルパスを指定します。ほとんどの場合、MTA チャネルには SLAVE_COMMAND がありません。その場合は、予約値である NULL を指定します。この値をセクションの外に設定すると、SLAVE_COMMAND が指定されていない [CHANNEL] セクションにより、デフォルトとして使用されます。[POOL] セクション内では、このオプションが無視されます。