停Sendmail启Postfix后日志仍显示Sendmail?技术求助
这种情况我碰到过好几次,核心问题大概率是系统默认的MTA(邮件传输代理)还没切换到postfix——虽然你停了sendmail服务、postfix也在监听25端口,但发信时调用的还是旧的sendmail命令,而非postfix提供的兼容版本。postfix本身自带了一个和sendmail命令兼容的脚本,用来替代系统原生的sendmail程序,但如果系统默认MTA没切换,发信操作还是会走旧的sendmail路径。
下面是具体的排查和解决步骤:
第一步:检查当前默认MTA
不同发行版的MTA管理工具略有差异:- 对于Debian/Ubuntu系,执行:
update-alternatives --list mta - 对于RHEL/CentOS系,执行:
alternatives --display mta
如果输出里显示默认MTA是sendmail,那就是这里的问题了。
- 对于Debian/Ubuntu系,执行:
第二步:切换默认MTA到postfix
- Debian/Ubuntu系:运行交互式命令选择postfix:
在弹出的选项里选postfix对应的编号即可。update-alternatives --config mta - RHEL/CentOS系:直接设置默认MTA为postfix的sendmail兼容程序:
(如果路径不对,可以用alternatives --set mta /usr/sbin/sendmail.postfixfind / -name sendmail.postfix找正确路径)
- Debian/Ubuntu系:运行交互式命令选择postfix:
第三步:验证sendmail命令的指向
执行以下命令查看软链接:ls -l /usr/sbin/sendmail正常情况下应该指向postfix的sendmail兼容程序,比如:
lrwxrwxrwx. 1 root root 25 Jun 5 10:00 /usr/sbin/sendmail -> /usr/libexec/postfix/sendmail如果还是指向原生sendmail的二进制,说明切换没生效,可手动调整软链接(推荐用alternatives工具,避免后续冲突)。
第四步:测试发信并验证日志
用命令行测试发信:echo "Test mail content" | sendmail -v root然后查看
/var/log/maillog,此时应该会看到postfix相关的进程日志,而不是sendmail的记录,同时root收件箱也能收到测试邮件了。
额外排查点
如果上述步骤做完还是有问题,要检查发送邮件的程序是否硬编码了sendmail的路径——比如某些脚本直接写了/usr/sbin/sendmail.sendmail(原生sendmail的二进制),这时候即使切换了系统默认MTA,它还是会调用旧程序,需要修改程序配置里的MTA路径为postfix的sendmail兼容程序。
内容的提问来源于stack exchange,提问作者ZebDp

