Sun Java System Messaging Server 6.3 管理指南

10.4.8 作业控制器文件

作业控制器可以创建并管理传送邮件的通道作业。这些通道作业在作业控制器内的进程池中运行。可以将池看作是一个运行通道作业的“地方”。池提供了一个计算区域,一组作业可以在其中运行而不与池外的作业竞争资源。(有关作业控制器概念和通道关键字配置的信息,请参阅8.7 作业控制器12.5.4 用于通道执行作业的处理池12.5.5 服务作业限制。)

作业控制器文件 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

10.4.8.1 使用示例

通常情况下,如果您需要将某些通道的处理与其他通道的处理区分开,则可以在作业控制器配置中添加附加的池定义。您也可以选择使用具有不同特征的池。例如,您可能需要控制某些通道可以处理的同时进行的请求的数量。您可以通过创建具有作业限制的新池来完成此操作,然后使用 pool 通道关键字将这些通道定向到更适合的新池。

除了池定义以外,作业控制器配置文件还包含 MTA 通道表以及作业控制器处理每个通道的请求所必须使用的命令。两类请求分别称为“主”类型和“从”类型。通常情况下,通道的 MTA 邮件队列中存储了邮件时,便会调用通道主程序。主程序会使邮件退出队列。

调用从程序的目的是轮询某通道并选取进入该通道的所有邮件。尽管几乎所有的 MTA 通道都有主程序,但是很多通道却没有或不需要从程序。例如,经过 TCP/IP 处理 SMTP 的通道就不使用从程序,因为网络服务和 SMTP 服务器将根据 SMTP 服务器发出的请求接收外来 SMTP 邮件。SMTP 通道的主程序是 MTA 的 SMTP 客户端。

如果与通道关联的目标系统无法一次处理多个邮件,则需要创建一种新类型的池,其作业限制为一个池:

[POOL=single_job]
job_limit=1

反之,如果目标系统具有足够的并行处理能力,则可以将作业限制设置为较高的值。

示例 10–1 显示了样例作业控制器配置文件。表 10–6 显示了可用的选项。


示例 10–1 UNIX 中的样例作业控制器配置文件


!MTA Job Controller configuration file
!
!Global defaults
tcp_port=27442         (1)
secret=never mind
slave_command=NULL     (2)
max_life_age=3600      (3)
!
!
!Pool definitions
!
[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 definitions
!
!
[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)
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_LIMIT 设置为 10

  6. 该 [CHANNEL] 部分应用于名为 l 的通道,即 UNIX 本地通道。该部分中所需的唯一定义是 master_command,作业控制器执行该命令来运行此通道。由于通道名称中没有显示通配符,所以通道必须完全匹配。

  7. 该 [CHANNEL] 部分应用于名称以 tcp_* 开头的所有通道。由于此通道名称中包含通配符,所以它将与名称以 tcp_ 开头的任何通道相匹配。

添加附加池的示例

作业控制器可以创建并管理传送邮件的通道作业。这些通道作业在作业控制器内的进程池中运行。可以将池看作是一个运行通道作业的“地方”。池提供了一个计算区域,一组作业可以在其中运行而不与池外的作业竞争资源。请注意,在 job_controller 中设置的作业限制是针对每个池的。例如,如果将 SMTP_POOLjob_limit 定义为 10,则在任一给定时刻,只能有 10 个 tcp_smtp 客户端进程可以在该池中运行。

某些情况下,可能需要创建附加的 tcp_* 通道(例如,用于特别缓慢的邮件站点的 tcp 通道)。最好是使这些通道在不同的池中运行。这样做的原因在于,如果我们创建了十个不同的 tcp_* 通道,并且它们全在 SMTP_POOL 中运行,则在任一给定时刻,每个 tcp_* 通道上可能只有一个 tcp_smtp 客户端在运行(具体情况取决于是否有目标为所有 tcp_* 通道的邮件,以及是否将 SMTP_POOLjob_limit 定义为 10)。假设系统负载很重,并且所有队列中都有邮件等待通过各个 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

为了使每个新通道有十个 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

有关池的更多信息,请参见12.5.4 用于通道执行作业的处理池

表 10–6 作业控制器配置文件选项

选项 

说明 

常规选项

说明

INTERFACE_ADDRESS=adapter

指定应绑定作业控制器的 IP 地址接口。指定的值(适配器)可以是 ANYALLLOCALHOST 之一,也可以是一个 IP 地址。默认情况下,作业控制器绑定到所有地址(相当于指定 ALLANY)。指定 INTERFACE_ADDRESS=LOCALHOST 表示作业控制器仅接受来自本地计算机内的连接。这不会影响正常操作,因为作业控制器不支持任何计算机之间的操作。但是,这对于 HA 代理可能正在检查作业控制器是否响应的 HA 环境可能并不适合。如果运行 Messaging Server 的计算机处于 HA 环境中,且具有一个“内部网络”适配器和一个“外部网络”适配器,而您不能确信防火墙可以阻止到高端口号的连接,则应考虑指定“内部网络”适配器的 IP 地址。

MAX_MESSAGES=integer

作业控制器以内存内结构保留有关邮件的信息。在较大的待办事项构建的事件中,可能需要限制此结构的大小。如果待办事项中的邮件数量超过了此处指定的参数,则有关后续邮件的信息将不会保留在内存中。因为邮件消息始终会被写入磁盘,所以邮件不会丢失,但是在作业控制器所知道的邮件数量降至此数量的一半之前,不会发送邮件。此时,作业控制器将模拟 imsimta cache -sync 命令扫描队列目录。最小值为 10。

默认值为 100000。 

SECRET=file_spec

用于保护已发送至作业控制器的请求的共享机密。 

SYNCH_TIME=time_spec

作业控制器会偶尔扫描磁盘上的队列文件,以检查是否有丢失的文件。默认情况下,此操作在作业控制器启动四小时后开始,每四小时进行一次。time_spec 的格式为 HH:MM/hh:mm/hh:mm。变量 hh.mm 是事件之间的时间间隔(以小时 [h] 和分钟 [m] 表示)。变量 HH:MM 是事件在一天中第一次发生的时间。例如,指定 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] 部分中,该选项将被忽略。