如何从Exim日志获取Pipe命令详细调试信息?排查Mailman3别名故障
排查Exim Pipe驱动调用Podman执行Mailman3别名功能失败的问题
1. 拉满Exim调试日志级别
- 修改Exim主配置(通常是
/etc/exim.conf或/etc/exim/exim.conf),把log_level改成debug:log_level = debug - 也可以只给
mailman3_virtual_transport单独加调试输出,在传输配置里加:debug_print = "执行Mailman3命令: $command_string" - 重启Exim生效:
systemctl restart exim
2. 捕获Podman命令的所有输出
原命令的输出没被Exim记录,得改命令把输出重定向到日志文件:
- 把原来的Pipe命令改成用shell包裹,重定向标准输出和错误:
/usr/bin/sh -c '/usr/bin/podman exec mailman3_container 你的原命令参数 2>&1 >> /var/log/exim_mailman3_debug.log' - 提前创建日志文件并给Exim权限:
touch /var/log/exim_mailman3_debug.log chown exim:exim /var/log/exim_mailman3_debug.log
3. 模拟Exim环境手动复现流程
手动运行挂起是因为没给命令传邮件内容(Exim会把邮件通过stdin传给Pipe命令),按下面步骤复现:
- 准备一个测试邮件文件
test_email.eml,内容用真实的邮件格式 - 切换到Exim运行用户执行命令,同时传入邮件内容:
这样就能完全模拟Exim的调用流程,看输出和是否挂起。su -s /bin/sh exim -c '/usr/bin/podman exec mailman3_container 你的原命令参数 < /path/to/test_email.eml'
4. 检查Exim用户的Podman权限
Mailman3是无root容器,得确认Exim运行用户(一般是exim)能无root用Podman:
- 检查用户组:
groups exim - 如果不在
podman组里,添加:usermod -aG podman exim - 重启Exim让权限生效:
systemctl restart exim
5. 核对Mailman3别名配置
确认Mailman3的Majordomo风格别名功能是开着的:
- 打开
mailman.cfg,检查:[majordomo] enabled = yes - 确认别名对应的命令正确指向Mailman3的处理脚本,比如
/usr/bin/mailman handle
内容的提问来源于stack exchange,提问作者Polo
相关产品推荐
相关产品推荐

