POSTMULTI(1) POSTMULTI(1)
名称
postmulti - Postfix 多实例管理器
概述
启用多实例管理:
postmulti -e init [-v]
迭代模式:
postmulti -l [-aRv] [-g 组名] [-i 实例名]
postmulti -p [-av] [-g 组名] [-i 实例名] postfix 命令...
postmulti -x [-aRv] [-g 组名] [-i 实例名] Unix 命令...
生命周期管理:
postmulti -e create [-av] [-g 组名] [-i 实例名] [-G 新组名] [-I 新实例名]
[参数=值 ...]
postmulti -e import [-av] [-g 组名] [-i 实例名] [-G 新组名] [-I 新实例名]
[config_directory=/路径]
postmulti -e destroy [-v] -i 实例名
postmulti -e deport [-v] -i 实例名
postmulti -e enable [-v] -i 实例名
postmulti -e disable [-v] -i 实例名
postmulti -e assign [-v] -i 实例名 [-I 新实例名] [-G 新组名]
描述
通过 postmulti(1) 命令,管理员可以在单台主机上管理多个 Postfix 实例。
该命令提供两种基本操作模式:在迭代模式下,可为多个实例执行相同命令;在生命周期管理模式下,可添加/删除实例或修改实例的多实例状态。
由于每种模式都有独立的命令语法,下文将分别说明。
背景知识
多实例配置包含一个主 Postfix 实例和若干辅助实例,其中辅助实例的配置目录路径记录在主实例的 main.cf 文件中。所有实例共享程序文件和文档,但各自拥有独立的配置、队列和数据目录。
当前仅默认 Postfix 实例可作为多实例配置中的主实例。若 MAIL_CONFIG 环境变量指向非默认配置目录,postmulti(1) 命令会报错退出(暂不支持通过 -c 选项选择其他主实例)。
更多细节请参考 MULTI_INSTANCE_README 教程。
迭代模式
此模式下,postmulti 会依次对所有 Postfix 实例执行相同操作。若未启用多实例支持,则仅对主实例执行命令。
支持以下命令选项:
实例选择
-a 对所有实例执行操作(默认行为)
-g 组名
仅对指定组的成员执行操作
-i 实例名
仅对指定实例执行操作(可接受实例名称或配置目录绝对路径)。使用 "-" 表示主实例
-R 反转迭代顺序(适用于更新多实例系统时,"接收"实例应先于"发送"实例启动)
(不可与 -p 同时使用)
列表模式
-l 列出所有 Postfix 实例,显示实例名称、所属组、启用状态和配置目录
Postfix 封装模式
-p postfix 命令
通过 postfix(1) 执行命令,实现 postfix-wrapper(5) 接口:
o 对"启动类"命令(由 postmulti_start_commands 参数定义),会为禁用实例执行"postfix check"
o 对"停止类"命令(由 postmulti_stop_commands 定义),会反转迭代顺序并跳过禁用实例
o 对"reload"等需要运行实例的命令(由 postmulti_control_commands 定义),会跳过禁用实例
o 对"status"等无需运行实例的命令,会执行所有实例
也可交互式操作特定实例/组,例如启动"msa"组的所有实例:
# postmulti -g msa -p start
命令模式
-x Unix 命令
为所有实例执行指定命令,并自动设置以下环境变量:
MAIL_CONFIG, command_directory, daemon_directory,
config_directory, queue_directory, data_directory,
multi_instance_name, multi_instance_group 和 multi_instance_enable
其他选项
-v 启用详细日志(可重复使用提高详细程度)
生命周期管理模式
通过 -e 选项可添加/删除实例,或修改现有实例的多实例状态。
支持以下选项:
现有实例选择
-a 创建/导入时,将新实例置于辅助实例列表首位
-g 组名
创建/导入时,将新实例置于指定组的首个成员之前
-i 实例名
创建/导入时,将新实例置于指定实例之前
其他操作中,指定目标实例("-"表示主实例)
名称分配
-I 实例名
为实例分配新名称(必须以"postfix-"开头)
("-"表示无名实例)
-G 组名
为实例分配新组名
实例操作
-e 操作
支持以下操作:
init 初始化多实例管理(必需步骤),会更新主实例的 main.cf:
multi_instance_wrapper = ${command_directory}/postmulti -p --
multi_instance_enable = yes
create 创建新实例并添加到主实例的 multi_instance_directories 参数
建议通过 -I 指定实例名(用于生成默认目录路径),-G 指定组名
新实例的 main.cf 会继承主实例的共享文件位置参数
对无名实例需手动设置 syslog_name 以生成唯一日志标识
可通过参数指定目录路径:
# postmulti -I postfix-mumble -G mygroup -e create \
config_directory=/my/config/dir \
queue_directory=/my/queue/dir \
data_directory=/my/data/dir
若目录已存在且包含 main.cf 和 master.cf,则自动转为导入操作
import 将现有实例纳入多实例管理(添加到主实例的 multi_instance_directories 列表)
可通过 -I 指定新名称(用于生成默认配置目录路径),-G 指定组名
用 config_directory=/路径 覆盖默认路径
destroy 销毁辅助实例(需先禁用且队列为空)
会从主实例配置中移除该实例,并清理其数据/队列/配置目录
(主实例的 main.cf 和 master.cf 会被强制删除)
若目录包含其他文件可能无法完全删除(会发出警告)
注意:此操作会永久删除文件,请确认目录设置正确
deport 将实例移出多实例管理(仅从主实例的 multi_instance_directories 列表移除)
不删除任何文件
assign 重命名实例或修改组名
用 -G - 清除组名,-I - 清除实例名
无名实例需手动设置合适的 syslog_name
enable 启用实例(设置实例的 main.cf 中 multi_instance_enable = yes)
disable 禁用实例(该实例不会被"postfix start"等命令操作)
但仍可通过"postfix -c config-directory start"单独启动
其他选项
-v 启用详细日志(可重复使用提高详细程度)
环境变量
执行命令时,postmulti(1) 会设置以下变量:
MAIL_VERBOSE
当存在 -v 选项时设置
MAIL_CONFIG
实例配置目录路径
配置参数
config_directory (参见 'postconf -d' 输出)
Postfix 配置文件的默认位置(main.cf 和 master.cf)
daemon_directory (参见 'postconf -d' 输出)
包含 Postfix 守护程序和支持程序的目录
import_environment (参见 'postconf -d' 输出)
特权 Postfix 进程从非 Postfix 父进程继承的环境变量列表
multi_instance_directories (空)
非默认 Postfix 配置目录列表(这些目录属于与主实例共享程序文件的附加实例)
multi_instance_group (空)
实例所属组名
multi_instance_name (空)
实例名称
multi_instance_enable (否)
是否允许通过多实例管理器启停该实例
postmulti_start_commands (start)
被视作"启动"命令的 postfix(1) 命令列表
postmulti_stop_commands (参见 'postconf -d' 输出)
被视作"停止"命令的 postfix(1) 命令列表
postmulti_control_commands (reload flush)
被视作"控制"命令的 postfix(1) 命令列表(作用于运行中的实例)
syslog_facility (mail)
Postfix 日志的 syslog 设施
syslog_name (参见 'postconf -d' 输出)
日志中进程名的前缀(如"smtpd"会变为"prefix/smtpd")
Postfix 3.0 及以上版本支持:
meta_directory (参见 'postconf -d' 输出)
多实例共享的非可执行文件位置(如 postfix-files、dynamicmaps.cf 等)
shlib_directory (参见 'postconf -d' 输出)
Postfix 动态链接库位置(libpostfix-*.so)
相关文件
$meta_directory/main.cf.proto - 标准配置文件模板
$meta_directory/master.cf.proto - 标准配置文件模板
$daemon_directory/postmulti-script - 生命周期管理辅助脚本
参见
postfix(1) - Postfix 控制程序
postfix-wrapper(5) - Postfix 多实例 API 规范
MULTI_INSTANCE_README - 多实例管理指南
历史版本
postmulti(1) 命令随 Postfix 2.6 版本引入
授权条款
使用本软件需遵循 Secure Mailer 授权协议
作者信息
Victor Duchovni
Morgan Stanley(摩根士丹利)
Wietse Venema
IBM T.J. Watson 研究中心
美国纽约州约克镇高地 704 号信箱(邮编:10598)
Wietse Venema
Google 公司
美国纽约州纽约市第八大道 111 号(邮编:10011)
POSTMULTI(1)