首页/网络/协议速查/Postfix 常用运维命令

Postfix 常用运维命令

自建邮件服务器排障围绕队列与日志:看积压用 mailq/postqueue,重试用 postqueue -f,删除用 postsuper(切勿直接 rm 队列文件)。

协议速查网络更新于 2026-10-13

Postfix 运维要点

自建邮件服务器的日常运维基本围绕队列与日志两件事:邮件积压看 mailq 或 postqueue -p,积压不动用 postqueue -f 手动冲刷,删除单封或清空队列一律走 postsuper,核对配置用 postconf -n,检查映射命中使用 postmap -q。最关键的一条纪律是不要直接删除队列目录里的文件——那会让队列索引与实际内容不一致,轻则邮件丢失,重则服务无法启动。

常用命令

命令作用备注
mailq 或 postqueue -p查看队列内容排障第一步
postqueue -f手动重试整个队列冲刷积压
postsuper -d 队列ID删除单封邮件先用 mailq 找到 ID
postsuper -d ALL清空队列危险,会直接丢信
postsuper -r ALL重新入队并更换队列 ID常用于修复卡单
postconf -n列出非默认配置核对当前生效参数
postmap -q 地址 hash:/etc/postfix/virtual查询映射命中结果虚拟域与别名排错
postfix reload重载配置改 main.cf 后生效

定位一封卡住的邮件

定位一封卡住的邮件
mailq | grep -A2 '4XyZ'                # 找到队列 ID 对应记录
grep '4XyZ' /var/log/maillog | tail -20  # 按 ID 追日志,看拒绝原因
postqueue -f                             # 确认原因已排除后手动重试

典型使用场景

  • 用户反馈收不到信:先看队列里是否还压着,再按队列 ID 追日志
  • 队列堆积告警:区分是目标拒绝、DNS 解析失败还是本机发送速度受限
  • 误拦截恢复:确认策略调整后用 postqueue -f 主动重试,而不必等下次调度
  • 虚拟域配置变更后验证:用 postmap 确认地址确实命中了期望的映射
  • 配置审计:用 postconf -n 快速看出哪些参数偏离了默认值
直接删除 /var/spool/postfix 下的文件会让队列状态与索引不一致:轻量场景看不出来,高并发下会让 Postfix 拒绝启动。所有删除与重排操作一律走 postsuper,这是不可绕过的一条纪律。
日志位置随发行版不同:RHEL 系在 /var/log/maillog,Debian 系在 /var/log/mail.log。启用 systemd 后也可以直接看单元日志,但邮件相关的拒收原因与队列 ID 仍以邮件日志最完整,排障时不要只看进程是否存活。

易错点

  • 删队列图省事直接 rm:轻型场景看不出问题,高并发下索引错乱会让 Postfix 启动失败
  • postsuper -d ALL 用在生产队列上:等于把待投递的用户邮件一次性丢弃,且无法恢复
  • 只看进程状态不看队列:服务存活但队列持续增长,用户已经大面积收不到信
  • 改完 main.cf 忘记 reload,误以为改动无效而反复调整参数
  • 用 postmap 查映射却忘记映射类型前缀,得到空结果就断定映射没配

数据来源与参考

  • Postfix 官方文档(postqueue/postsuper)
  • RFC 5321

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌