我是一个 exim 新手 - 并且继承了一个运行不正常的 exim 的系统。
我的实例已停止发送电子邮件。它正在接受队列中的消息,并且正在运行-q1h
- 每小时,对于队列中的每条消息,它都会报告...
defer (-53): retry time not reached for any host
它被配置为使用高度可用的智能主机——所以这不是远程 MTA 的问题。实际上exim -v
,从命令行运行以发送电子邮件,它会立即传递给智能中继。即,路由、身份验证、可用性没有问题。Exim 根本不尝试转发这些电子邮件。
我看到很多人说解决此问题的方法是通过仅删除锁定文件或锁定文件和重试数据库来重置重试数据库。这两种方法都对我的 mailq 没有任何影响。
注意,这不是失败后的重试——exim 从未尝试传递消息。
重试配置默认为:
begin retry
* * F,2h,15m; G16h,1h,1.5; F,4d,6h
我想这-q1h
就是它没有立即尝试转发消息的原因。但是为什么它不从队列中提取消息呢?
由于这是移交给智能中继,因此我无需备份一个小时的消息。如果我从选项中删除 -q1h,exim 会继续定期扫描队列还是忽略它?
这
-q1h
意味着守护程序将每小时处理一次队列。让它处理队列是明智的,因为即使您通过智能主机发送,即使出于任何原因可能会脱机/无法访问,并且会导致消息被放置在队列中。不运行队列意味着永远不会发送这些消息。exim 报告“未达到任何主机的重试时间”这一事实意味着智能主机在某些时候显然无法访问。为防止重复尝试访问离线主机而浪费资源,设置了重试时间,但显然尚未达到该时间。我敢肯定,如果您进一步搜索日志,您将看到智能主机无法访问的位置。
您可以通过运行强制尝试传递消息(您可以查看带有或是否已将 exim 链接到此名称
exim -M messageID
的消息 ID )。exim -bp
mailq
我忘记了规则#1:
当 Redhat / Centos 系统在 %^&* 中咬你时,它可能是SELinux / 目标策略