Sun Java System Messaging Server 6 2005Q4 管理指南

其他 MTA 配置文件

除了 imta.cnf 文件,Messaging Server 还提供了其他几个配置文件,以帮助您配置 MTA 服务。表 10–5 中汇总了这些文件。

如果对 reverseforward 或通用数据库进行了更改,可执行命令 imsimta reload 使更改生效。如果对 imta.cnfmappings 文件、aliasesconversionsoption.dat 文件进行了更改,而这些更改不会影响 job_controller,则应先执行 imsimta cnbuild,再执行 imsimta restart smtp。如果对 dispatcher.cnf 进行了更改,则需要执行 imsimta restart dispatcher。如果对编译后的配置中的配置文件进行了更改,并且这些更改会影响作业控制器但不会影响 SMTP 服务器,则通常应执行以下命令:imsimta cnbuildimsimta restart job_controller

有关这些命令的详细信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》中的“MTA Commands”

表 10–5 MTA 配置文件

文件 

说明 

别名文件(强制)

实现目录中不存在的别名。msg_svr_base/config/aliases

TCP/IP (SMTP) 通道选项文件(也称为 SMTP 选项文件)

设置特定于通道的选项。msg_svr_base/config/channel_option

转换文件

由转换通道使用,用于控制邮件正文部分的转换。msg_svr_base/config/conversions

分发程序配置文件(强制)

分发程序的配置文件。msg_svr_base/config/dispatcher.cnf

作业控制器文件(强制)

作业控制器所使用的配置文件。/msg_svr_base/config/job_controller.cnf

MTA 配置文件(强制) 

用于地址重写、路由以及通道定义。/msg_svr_base/config/imta.cnf

映射文件(强制)

映射表的系统信息库。/msg_svr_base/config/mappings

选项文件

全局 MTA 选项文件。/msg_svr_base/config/option.dat

调整文件(强制)

用于指定位置和某些优化参数的文件。/msg_svr_base/config/imta_tailor

常规查找表(可选) 

常规查找工具与常规数据库等效。可重新装入的经过编译的配置的一部分。 

用于指定位置和某些优化参数的文件。/msg_svr_base/config/general.txt

正向查找表(可选) 

To: 地址的查找。与正向数据库等效。可重新装入的经过编译的配置的一部分。 

/msg_svr_base/config/forward.txt

反向查找表(可选) 

From: 地址的反向查找。与反向数据库等效。可重新装入的经过编译的配置的一部分。/msg_svr_base/config/reverse.txt

别名文件

别名文件 aliases 可用来设置目录中未设置的别名。特别地,根的地址是一个很好的示例。如果目录中存在同一别名,则将忽略在此文件中设置的别名。有关别名和 aliases 文件的更多信息,请参见别名

aliases 文件进行更改后,必须重新启动 MTA 或执行命令 imsimta reload

TCP/IP (SMTP) 通道选项文件

TCP/IP 通道选项文件可以控制 TCP/IP 通道的各种特性。通道选项文件必须存储在 MTA 配置目录中,并命名为 x_option,其中 x 是通道的名称。例如,msg_svr_base/config/imta/tcp_local_option。有关更多信息,请参阅配置 SMTP 通道选项。有关所有通道选项关键字和语法的完整信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

转换文件

转换文件 conversions 指定转换通道如何对通过 MTA 的邮件执行转换。可以选择转换任何 MTA 通信子集,并可以使用任何一组程序或命令过程来执行转换处理。MTA 将查看转换文件,以便为每个正文部分选择适当的转换。

有关此文件的语法的更多信息,请参见转换通道

分发程序配置文件

分发程序配置文件 dispatcher.cnf 用于指定分发程序配置信息。安装时将创建一个默认的配置文件,可不必对其进行更改而直接使用。但是,如果出于安全性或性能原因需要修改默认配置文件,则可以通过编辑 dispatcher.cnf 文件来实现此操作。(有关概念性信息,请参见分发程序。)

分发程序配置文件的格式与其他 MTA 配置文件的格式类似。指定选项的行具有以下格式:

option=value

option 是选项的名称,value 是选项被设置成的字符串或整数。如果 option 可以接受整数值,则可以使用 b%v 格式的记数法指定基数,其中 b 是以 10 为基础表示的基数,v 是以 b 为基础表示的实际值。此类选项规范根据应用以下选项设置的服务,使用以下格式的行分组成几个部分:

[SERVICE=service-name]

service-name 是服务的名称。显示在任何此类部分标记之前的初始选项规范将全局地应用于所有部分。

以下是一个样例分发程序配置文件 (dispatcher.cnf)。


! The first set of options, listed without a [SERVICE=xxx]
! header, are the default options that will be applied to all
! services.
!
MIN_PROCS=0
MAX_PROCS=5
MIN_CONNS=5
MAX_CONNS=20
MAX_LIFE_TIME=86400
MAX_LIFE_CONNS=100
MAX_SHUTDOWN=2
!
! Define the services available to Dispatcher
!
[SERVICE=SMTP]
PORT=25
IMAGE=msg_svr_base/lib/tcp_smtp_server
LOGFILE=msg_svr_base/log/tcp_smtp_server.log

有关此文件参数的更多信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

映射文件

mappings 文件定义 MTA 如何将输入字符串映射为输出字符串。

MTA 的许多组件都使用面向表查找的信息。一般说来,此类表格可用于将输入字符串转换(即映射)为输出字符串。此类表(称为映射表),通常显示为两列,第一(或左边的)列给出了可能的输入字符串,第二(或右边的)列给出了与输入关联的结果输出字符串。大多数 MTA 数据库都是此类映射表的实例。但是,MTA 数据库文件不具备通配符查找功能,因为其具有内在局限性,必须要扫描整个数据库才能找到匹配的通配符。

mappings 文件为 MTA 提供了支持多个映射表的工具。它提供了完整的通配符工具,并同时提供了多步和迭代映射方法。此方法的计算量比使用数据库要大,特别是条目很多时。但是,其灵活性带来的好处是实际上您不需要等效数据库中的大多数条目,从而可能使实际总体开销较低。

可以使用 imsimta test -mapping 命令来测试映射表。有关 mappings 文件和 test -mapping 命令的语法的更多信息,请参见映射文件《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

mappings 文件进行更改后,必须重新启动 MTA 或执行命令 imsimta reload

选项文件

选项文件 option.dat 指定与特定于通道的选项相反的全局 MTA 选项。

您可以使用选项文件覆盖作为整体应用于 MTA 的各种参数的默认值。特别地,选项文件可用于建立读入配置和别名文件的各种表的大小。您还可以使用选项文件限制 MTA 接收的邮件的大小、指定 MTA 配置中允许的通道数量、设置允许的重写规则的数量,等等。

option.dat 中,以 #!; 开头的行被视为注释行,即使前一行带有表示待续的后缀 \ 也不例外。这就说明必须留意包含这些字符的长选项(特别是传送选项)。

对于因自然布局而具有以 # 或 ! 开头的连续行的传送选项,有一种安全而巧妙的解决方法。

有关选项文件语法的更多信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

调整文件

调整文件 imta_tailor 用于设置各种 MTA 组件的位置。为使 MTA 正常工作,imta_tailor 文件必须始终位于 msg_svr_base/config 目录中。

尽管您可以编辑此文件以反映在特定安装中的更改,但是您必须谨慎地执行此操作。对此文件进行更改后,必须重新启动 MTA。最好是在 MTA 停止时进行更改。


注 –

除非绝对必要,否则请勿编辑此文件。


有关此文件的完整信息,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

作业控制器文件

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

作业控制器文件 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 通道表以及作业控制器处理每个通道的请求所必须使用的命令。两类请求分别称为“主”类型和“从”类型。通常情况下,通道的 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)
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_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

有关池的更多信息,请参见用于通道执行作业的处理池,另请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

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

选项 

说明 

常规选项 

说明 

INTERFACE_ADDRESS=adapter

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

MAX_MESSAGES=integer

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

默认值为 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] 部分中,该选项将被忽略。