QMGR(8)                                                                QMGR(8)

名称
       qmgr - Postfix 队列管理器

概述
       qmgr [通用 Postfix 守护进程选项]

描述
       qmgr(8) 守护进程负责接收传入邮件并通过 Postfix 投递进程安排投递。实际的邮件路由策略由 trivial-rewrite(8) 守护进程处理。本程序需通过 master(8) 进程管理器运行。

       发往本地 double-bounce 地址的邮件会被记录并丢弃,这样可以避免因无法投递的退回通知导致的潜在循环问题。

邮件队列
       qmgr(8) 守护进程维护以下队列:

       incoming
              来自网络的入站邮件,或由本地 pickup(8) 守护进程从 maildrop 目录获取的邮件。

       active
              队列管理器已打开准备投递的邮件。采用漏桶策略控制进入 active 队列的邮件数量(固定投递速率)。

       deferred
              首次尝试投递失败的邮件。队列管理器通过将两次投递尝试间隔时间加倍的方式实现指数退避。

       corrupt
              无法读取或已损坏的队列文件会被移至此处进行检查。

       hold
              被"暂存"的邮件会保留在此处,直到有人将其释放。

投递状态报告
       qmgr(8) 守护进程监控以下目录中的每封邮件投递状态报告。每个状态报告文件与对应的邮件文件同名:

       bounce
              记录邮件被退回原因的收件人状态信息,由 bounce(8) 守护进程维护。

       defer
              记录邮件延迟原因的收件人状态信息,由 defer(8) 守护进程维护。

       trace
              记录通过 Postfix "sendmail -v" 或 "sendmail -bv" 命令请求的收件人状态信息,由 trace(8) 守护进程维护。

       qmgr(8) 守护进程负责请求 bounce(8)defer(8)trace(8) 守护进程发送投递报告。

策略
       队列管理器实现了多种策略,用于队列文件打开(输入)或邮件投递(输出):

       漏桶
              限制 active 队列中的邮件数量,防止队列管理器在高负载下耗尽内存。

       公平性active 队列有空位时,队列管理器会从 incoming 队列deferred 队列各取一封邮件,防止大量积压邮件阻塞新邮件投递。

       慢启动
              通过缓慢调整发往同一目的地的并行投递数量,避免"惊群"问题。

       轮询
              队列管理器按目的地对投递请求排序,轮询选择防止单一目的地独占对其他目的地的投递资源。

       指数退避
              首次投递失败的邮件会被延迟,每次尝试后投递间隔时间加倍。

       目的地状态缓存
              通过维护短期内存中的不可达目的地列表,避免不必要的投递尝试。

       抢占式消息调度
              在保持正确单邮件延迟的前提下,使用复杂的抢占式调度算法最小化收件人平均延迟。

触发器
       在空闲系统中,队列管理器等待触发事件或定时器触发。触发器是单字节消息,根据接收到的消息(后附软件内部使用的符号常量),队列管理器执行以下操作之一:

       D (QMGR_REQ_SCAN_DEFERRED)
              启动 延迟队列 扫描。如果扫描已在运行,将在当前扫描完成后立即重启。

       I (QMGR_REQ_SCAN_INCOMING)
              启动 传入队列 扫描。如果扫描已在运行,将在当前扫描完成后立即重启。

       A (QMGR_REQ_SCAN_ALL)
              忽略 延迟队列 文件时间戳,该请求会影响下一次 延迟队列 扫描。

       F (QMGR_REQ_FLUSH_DEAD)
              清除所有关于失效传输和目的地的信息。

       W (TRIGGER_REQ_WAKEUP)
              唤醒调用,主服务器用此实例化不应永久退出的服务。操作是启动 传入队列 扫描。

       qmgr(8) 守护进程会读取整个缓冲区的触发器。多个相同触发器请求会被合并为一个,且触发器请求会被排序使 AF 排在 DI 之前。因此,强制 延迟队列 运行需请求 A F D;通知队列管理器新邮件到达需请求 I标准
       RFC 3463 (增强状态码)
       RFC 3464 (投递状态通知)

安全性
       qmgr(8) 守护进程对安全性不敏感。它会从不受信任的本地用户读取单字符消息,因此可能受到拒绝服务攻击。qmgr(8) 不与外部通信,可在 chroot 环境中以固定低权限运行。

诊断
       问题和事务会记录到 syslogd(8) 或 postlogd(8)。损坏的邮件文件会保存到 corrupt 队列供进一步检查。

       根据 notify_classes 参数设置,postmaster 会收到退信和其他问题的通知。

缺陷
       单个队列管理器进程需与 cleanup(8) 等多个前端进程竞争磁盘访问。突然的入站邮件激增可能对出站投递速率产生负面影响。

配置参数
       由于 qmgr(8) 是持久进程,main.cf 的更改不会自动生效。配置变更后需使用 "postfix reload" 命令。

       下文为参数摘要,详见 postconf(5) (含示例)。

       下文中,transportmaster.cf 条目中的第一个字段。

兼容性控制
       Postfix 2.5 之前版本可用:

       allow_min_user (no)
              允许发件人或收件人地址以"-"开头。

       Postfix 2.7 及之后版本可用:

       default_filter_nexthop (空)content_filter 或 FILTER 请求未指定明确下一跳目的地时,使用 $default_filter_nexthop;若为空则使用收件人地址中的域名。

活动队列控制
       qmgr_clog_warn_time (300s)
              特定目的地堵塞 Postfix 活动队列 时两次警告间的最小间隔。

       qmgr_message_active_limit (20000)
              活动队列 中的最大邮件数。

       qmgr_message_recipient_limit (20000)
              Postfix 队列管理器内存中保存的最大收件人数量,以及短期内存中"失效"目的地状态缓存的最大大小。

       qmgr_message_recipient_minimum (10)
              任何邮件在内存中的最小收件人数量。

       default_recipient_limit (20000)
              每个传输在内存中收件人数量的默认上限。

       transport_recipient_limit ($default_recipient_limit)
              传输特定参数,覆盖 default_recipient_limit 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_extra_recipient_limit (1000)
              每个传输在内存中收件人数量额外限制的默认值。

       transport_extra_recipient_limit ($default_extra_recipient_limit)
              传输特定参数,覆盖 default_extra_recipient_limit 值,其中 transportmaster.cf 中邮件投递传输的名称。

       Postfix 2.4 及之后版本可用:

       default_recipient_refill_limit (100)
              每个传输单次补充收件人数量的默认限制。

       transport_recipient_refill_limit ($default_recipient_refill_limit)
              传输特定参数,覆盖 default_recipient_refill_limit 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_recipient_refill_delay (5s)
              每个传输两次补充收件人间隔的默认最大延迟。

       transport_recipient_refill_delay ($default_recipient_refill_delay)
              传输特定参数,覆盖 default_recipient_refill_delay 值,其中 transportmaster.cf 中邮件投递传输的名称。

投递并发控制
       initial_destination_concurrency (5)
              发往同一目的地的初始并行投递数量。

       default_destination_concurrency_limit (20)
              发往同一目的地的默认最大并行投递数量。

       transport_destination_concurrency_limit ($default_destination_concurrency_limit)
              传输特定参数,覆盖 default_destination_concurrency_limit 值,其中 transportmaster.cf 中邮件投递传输的名称。

       Postfix 2.5 及之后版本可用:

       transport_initial_destination_concurrency ($initial_destination_concurrency)
              传输特定参数,覆盖 initial_destination_concurrency 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_destination_concurrency_failed_cohort_limit (1)
              在认为特定目的地不可用(并暂停进一步投递)前,允许失败的连接或握手伪队列数量。

       transport_destination_concurrency_failed_cohort_limit ($default_destination_concurrency_failed_cohort_limit)
              传输特定参数,覆盖 default_destination_concurrency_failed_cohort_limit 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_destination_concurrency_negative_feedback (1)
              投递完成时出现连接或握手失败后,每个目的地的投递并发负反馈量。

       transport_destination_concurrency_negative_feedback ($default_destination_concurrency_negative_feedback)
              传输特定参数,覆盖 default_destination_concurrency_negative_feedback 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_destination_concurrency_positive_feedback (1)
              投递完成时未出现连接或握手失败后,每个目的地的投递并发正反馈量。

       transport_destination_concurrency_positive_feedback ($default_destination_concurrency_positive_feedback)
              传输特定参数,覆盖 default_destination_concurrency_positive_feedback 值,其中 transportmaster.cf 中邮件投递传输的名称。

       destination_concurrency_feedback_debug (no)
              为性能分析目的,使队列管理器的反馈算法输出详细信息。

收件人调度控制
       default_destination_recipient_limit (50)
              每次邮件投递的默认最大收件人数量。

       transport_destination_recipient_limit ($default_destination_recipient_limit)
              传输特定参数,覆盖 default_destination_recipient_limit 值,其中 transportmaster.cf 中邮件投递传输的名称。

邮件调度控制
       default_delivery_slot_cost (5)
              Postfix 队列管理器调度器允许抢占当前邮件投递以投递其他邮件的频率。

       transport_delivery_slot_cost ($default_delivery_slot_cost)
              传输特定参数,覆盖 default_delivery_slot_cost 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_minimum_delivery_slots (3)
              邮件必须有多少收件人才会触发 Postfix 队列管理器的调度算法。

       transport_minimum_delivery_slots ($default_minimum_delivery_slots)
              传输特定参数,覆盖 default_minimum_delivery_slots 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_delivery_slot_discount (50)
              传输特定 _delivery_slot_discount 设置的默认值。

       transport_delivery_slot_discount ($default_delivery_slot_discount)
              传输特定参数,覆盖 default_delivery_slot_discount 值,其中 transportmaster.cf 中邮件投递传输的名称。

       default_delivery_slot_loan (3)
              传输特定 _delivery_slot_loan 设置的默认值。

       transport_delivery_slot_loan ($default_delivery_slot_loan)
              传输特定参数,覆盖 default_delivery_slot_loan 值,其中 transportmaster.cf 中邮件投递传输的名称。

其他资源和速率控制
       minimal_backoff_time (300s)
              两次尝试投递延迟邮件的最小间隔时间(Postfix 2.4 之前默认值为 1000s)。

       maximal_backoff_time (4000s)
              两次尝试投递延迟邮件的最大间隔时间。

       maximal_queue_lifetime (5d)
              当投递出现临时错误且邮件在队列中的时间达到 maximal_queue_lifetime 限制时,视为无法投递。

       queue_run_delay (300s)
              队列管理器扫描 延迟队列 的时间间隔(Postfix 2.4 之前默认值为 1000s)。

       transport_retry_time (60s)
              Postfix 队列管理器尝试联系故障邮件投递传输的时间间隔。

       Postfix 2.1 及之后版本可用:

       bounce_queue_lifetime (5d)
              当投递出现临时错误且退信邮件在队列中的时间达到 bounce_queue_lifetime 限制时,视为无法投递。

       Postfix 2.5 及之后版本可用:

       default_destination_rate_delay (0s)
              发往同一目的地并通过同一邮件投递传输的两次单独邮件投递间的默认延迟时间。

       transport_destination_rate_delay ($default_destination_rate_delay)
              传输特定参数,覆盖 default_destination_rate_delay 值,其中 transportmaster.cf 中邮件投递传输的名称。

       Postfix 3.1 及之后版本可用:

       default_transport_rate_delay (0s)
              通过同一邮件投递传输的两次单独邮件投递间的默认延迟时间(不限目的地)。

       transport_transport_rate_delay ($default_transport_rate_delay)
              传输特定参数,覆盖 default_transport_rate_delay 值,其中参数名开头的 transportmaster.cf 中邮件投递传输的名称。

安全控制
       qmgr_daemon_timeout (1000s)
              Postfix 队列管理器进程处理请求的最长时间,超过此时限会被内置看门狗定时器终止。

       qmgr_ipc_timeout (60s)
              队列管理器通过内部通信通道发送或接收信息的超时时间。

       Postfix 3.1 及之后版本可用:

       address_verify_pending_request_limit (参见 'postconf -d' 输出)
              防止地址验证请求淹没 Postfix 队列的安全限制。

杂项控制
       config_directory (参见 'postconf -d' 输出)
              Postfix main.cfmaster.cf 配置文件的默认位置。

       defer_transports (空)
              除非有人执行"sendmail -q"或等效命令,否则不应投递邮件的邮件传输名称列表。

       delay_logging_resolution_limit (2)
              记录亚秒级延迟值时,小数点后的最大位数。

       helpful_warnings (yes)
              记录有关问题配置设置的警告,并提供有用建议。

       process_id (只读)
              Postfix 命令或守护进程的进程 ID。

       process_name (只读)
              Postfix 命令或守护进程的进程名称。

       queue_directory (参见 'postconf -d' 输出)
              Postfix 顶级队列目录的位置。

       syslog_facility (mail)
              Postfix 日志记录使用的 syslog 设施。

       syslog_name (参见 'postconf -d' 输出)
              在 syslog 记录中进程名称前添加的前缀,例如"smtpd"会变成"prefix/smtpd"。

       Postfix 3.0 及之后版本可用:

       confirm_delay_cleared (no)
              发送"您的邮件被延迟"通知后,在延迟解除时通知发件人。

       Postfix 3.3 及之后版本可用:

       service_name (只读)
              Postfix 守护进程在 master.cf 中的服务名称。

       Postfix 3.5 及之后版本可用:

       info_log_address_format (external)
              非调试日志(信息、警告等)中使用的电子邮件地址格式。

文件
       /var/spool/postfix/incoming, 传入队列
       /var/spool/postfix/active, 活动队列
       /var/spool/postfix/deferred, 延迟队列
       /var/spool/postfix/bounce, 未送达状态
       /var/spool/postfix/defer, 未送达状态
       /var/spool/postfix/trace, 投递状态

参见
       trivial-rewrite(8), 地址路由
       bounce(8), 投递状态报告
       postconf(5), 配置参数
       master(5), 通用守护进程选项
       master(8), 进程管理器
       postlogd(8), Postfix 日志记录
       syslogd(8), 系统日志记录

自述文件
       SCHEDULER_README, 调度算法
       QSHAPE_README, Postfix 队列分析

许可证
       必须随本软件分发 Secure Mailer 许可证。

作者
       Wietse Venema
       IBM T.J. Watson 研究中心
       邮政信箱 704
       美国纽约州约克镇高地,邮编 10598

       抢占式调度程序增强:
       Patrik Rak
       Modra 6
       155 00,捷克共和国布拉格

       Wietse Venema
       Google 公司
       纽约第八大道 111 号
       美国纽约州纽约市,邮编 10011

                                                                       QMGR(8)