如前所述,Exim 能够立即传递消息或将其排队以供稍后处理。所有传入的邮件都存储在input目录下的/var/spool/exim。当排队未运行时,一旦收到每封邮件,就会启动一个传递进程。否则,它会留在队列中,直到 queue-runner 进程将其取出。可以通过在配置文件中设置queue_only来使排队成为无条件的,或者可以通过诸如以下设置,使其有条件地取决于 1 分钟的系统负载
queue_only_load = 4 |
如果您的主机没有永久连接到互联网,您可能希望为远程地址启用排队,同时允许 Exim 立即执行本地传递。您可以通过在配置文件中设置
queue_remote_domains = * |
如果您启用了任何形式的排队,您必须确保定期检查队列,可能每 10 或 15 分钟一次。即使没有任何显式的排队选项,也需要检查队列中因临时传递失败而被延迟的消息。如果您在守护进程模式下运行 Exim,则必须在命令行中添加–q15m选项,以每 15 分钟处理一次队列。您也可以在这些时间间隔内从 cron 调用 exim –q。
您可以通过使用–bp选项调用 Exim 来显示当前的邮件队列。等效地,您可以将 mailq 链接到 Exim,然后调用 mailq
$ mailq 2h 52K 12EwGE-0005jD-00 <sam@vbrew.com> D bob@vbrew.com harry@example.net |
这显示了来自 sam@vbrew.com 的一条消息,其中有两个收件人位于消息队列中。 它已成功传递到 bob@vbrew.com,但尚未传递到 harry@example.net,尽管它已在队列中待了两个小时。 消息的大小为 52K,Exim 用来标识此消息的 ID 是12EwGE-0005jD-00。您可以通过查看消息的单个日志文件来找出传递尚未完成的原因,该日志文件保存在 Exim 的假脱机目录中的msglog目录中。–Mvl选项是执行此操作的简便方法
$ exim –Mvl 12EwGE-0005jD-00 2000-01-30 17:28:13 example.net [192.168.8.2]: Connection timed out 2000-01-30 17:28:13 harry@example.net: remote_smtp transport deferred: Connection timed out |
$ exigrep 12EwGE-0005jD-00 /var/log/exim/exim_mainlog |
您可以通过在主日志文件上运行 tail 来持续监视正在运行的 Exim 的操作。 另一种方法是运行 Exim 随附的 eximon 实用程序。 这是一个 X11 应用程序,它显示主日志的滚动显示,并显示正在等待传递的消息的列表,以及有关传递活动的一些带状图。
[1] | 系统负载是标准 Unix 用于衡量排队等待运行的进程平均数量的指标。 uptime 显示了过去 1 分钟、5 分钟和 15 分钟的平均负载。 |