Exim PanicLog的大小为非零值...?

我从我的Ubuntu服务器收到以下错误信息:
exim paniclog /var/log/exim4/paniclog on (my server FQDN) has non-zero size, mail system might be broken.

我在网上找到了一个解决方案这里。基本上,我只需要输入以下代码来删除paniclog:
sudo rm /var/log/exim4/paniclog

所以,我知道如何解决这个错误,但是我不知道它是怎么开始的,也不知道如何避免再次发生。有什么解释吗?提前谢谢。

2请发布paniclog的内容,以查看exim所生成的具体错误,然后我们可以就如何防止这个错误再次发生给予建议。Exim只是在完成它的工作,并告诉你发生了一些意外的事情 :) - roadmr
这个问题似乎被放弃了,没有得到回答。你能否提供更多细节来解释你的问题?如果这个问题已经不适用了,你可以选择删除它,或者如果你已经解决了问题,可以自己回答。谢谢! - Kevin Bowen
paniclog中列出的错误在OP和我的情况下已经得到解决。这里报告的错误是,尽管这些错误已经得到解决,但exim邮件代理仍然坚持将它们保留在paniclog中,因此它会继续每晚向您发送电子邮件(误报)。解决方案是删除该文件,否则exim将继续警告您其中列出的已解决错误。@roadmr - oemb1905
并/或者调整logrotate设置或使用logrotate手动进行日志轮转。至于关于“它是如何开始的”的次要问题...当然,一旦删除了paniclog,就无法知道了,但只要在删除或日志轮转后停止接收报告,那么您就知道最初导致paniclog报告的问题现在已经解决了。简而言之,exim每天发送虚假报警,直到删除或轮转paniclog文件为止。 - oemb1905
6个回答

我遇到了同样的问题,这是我的exim4 paniclog的样子:
$ sudo cat /var/log/exim4/paniclog

2014-02-01 21:36:51 socket bind() to port 25 for address 127.0.0.1 failed: Address already in use: daemon abandoned
2014-02-01 22:03:33 socket bind() to port 25 for address 127.0.0.1 failed: Address already in use: daemon abandoned
2014-02-01 22:33:19 socket bind() to port 25 for address 127.0.0.1 failed: Address already in use: daemon abandoned
2014-02-01 22:36:33 socket bind() to port 25 for address 127.0.0.1 failed: Address already in use: daemon abandoned
2014-02-01 23:03:51 socket bind() to port 25 for address 127.0.0.1 failed: Address already in use: daemon abandoned
2014-02-01 23:14:31 socket bind() to port 25 for address 127.0.0.1 failed: Address already in use: daemon abandoned
2014-02-02 11:09:48 socket bind() to port 25 for address 127.0.0.1 failed: Address already in use: daemon abandoned

这个问题显然是通过删除paniclog文件来解决的。

8不行。删除那个文件并不能解决问题。 - Olli
占用的地址与日志文件有什么关系?@willbeeler检查使用25号端口的应用程序。 - s3lph
2这是解决方案,如果问题是暂时的,并且日志文件消息不再适用。删除日志以停止获取这些紧急警告。 - Eric Woodruff
日志总是好的 - tread
是的,操作成功。在删除后重新启动 Exim。 - Abhishek Goel

上述答案不好,因为你删除了一个日志文件,这将导致来自exim的未来日志条目消失。解决方法是创建一个日志文件备份。
大多数基于Debian的发行版使用logrotate来完成此任务。你可以使用logrotate命令强制备份。选项-f用于强制备份,-v用于更详细的输出。
尝试以下命令(适用于Debian和Ubuntu)。
sudo logrotate -f -v /etc/logrotate.d/exim4-paniclog

Exim会在出现另一个错误/严重故障时立即创建paniclog文件。只要错误得到解决,删除paniclog文件没有任何问题。@Jackfritt - oemb1905
同意删除paniclog文件并不理想。人们最好能够理解为什么它首次报告了错误。我添加了一个答案,区分了paniclog的起因和为什么人们尽管问题已经修复,但仍然会收到报告。注意:任何报告称删除文件解决了问题的人实际上是在报告他们在之前某个时间点修复了错误配置,导致exim在被删除后无法重新生成paniclog。 - oemb1905

在我的情况下,错误如下所示:
exim paniclog on my-host has non-zero size

socket bind() to port 25 for address ::1 failed: cannot assign requested address: daemon abandoned

我的解决方案是删除paniclog文件,并执行dpkg-reconfigure exim4-config命令,将::1从绑定的IP中移除。

你是怎么准确地执行 dpkg reconfigure 的?我得到的错误信息是:dpkg: error: need an action option,所以这个命令还有更多内容。 - Seamus
谢谢你尝试这个,@Seamus。事实上是错误的,应该是一个完整的单词(dpkg-reconfigure)。我已经修正了答案。 - David
在你的情况下,你收到了一个paniclog错误,因为你有一个未解决的错误。修复错误后,你运行了一个命令,创建了一个新的paniclog文件。你的帖子是关于一个ipv6的套接字错误,OP的帖子并不是关于任何特定的错误,而是关于尽管错误已经解决,exim仍然继续给他们发送邮件的问题。 - oemb1905
更正:OP的帖子涉及两个话题,但该报告显然是一个错误的阳性或在之前已解决,否则exim会在删除文件/报告后重新生成它,并且问题仍然存在。 - oemb1905

在我的情况下,passwd文件丢失了,这导致exim4恐慌。我添加了一个新用户,这样就添加了该文件,并具有适当的权限和exim期望的内容。
看起来exim至少需要一个本地用户,而该域名只有所有转发用户。 一旦我添加了一个带有密码的本地用户,错误就停止了。
你的情况可能会有所不同。

这篇博客文章似乎有一个答案。看起来可能与IPv6设置有关,并且是由于内核支持IPv6的方式发生了变化导致的结果。

基本上,现在先禁用IPv6


1虽然这个回答在理论上是正确的,但最好还是在这里包含回答的关键部分,并提供链接供参考。 - Kevin Bowen
5现在我们有了@KevinBowen评论背后的推理。你的链接已经失效,现在你的答案没有意义。请总结并提取所有链接中的相关信息。 - Allison
我当时的假设,现在仍然是,禁用IPv6只是一个临时解决方案。禁用IPv6不应该成为一个标准的修复方法,所以这个答案即使过去了5年以上,也应该是无用的,尽管当初禁用的原因是什么。 - flickerfly
1IPv6支持只是导致exim邮件代理的非零大小/paniclog报告的众多问题之一,远非唯一的原因。此外,即使修复了该问题或其他任何问题,exim仍将继续发送/报告错误,直到paniclog轮换或被删除。 - oemb1905

如果您在paniclog中报告了一个未解决的错误,或者即使您解决了错误,您仍会收到警报/电子邮件,直到达到日志轮转限制、删除文件或调整/指示logrotate较早地归档它,这时您将收到"non-zero size"警告。
问题一:人们会针对paniclog中特定的错误作出回应,这些错误可能与原始帖子无关。然而,有成百上千种问题可能导致相同的报告。
问题二:不管paniclog中有什么错误,exim都会继续向您发送电子邮件(即使已解决/修复),直到文件轮转或被删除为止。
重要的是要区分导致报告/paniclog的特定配置错误,并且尽管解决了问题,仍持续收到报告的情况。
删除paniclog文件没有任何损害。如果出现新问题或您从未修复过最初的问题,Exim会重新创建该文件。然而,我同意@Jackfritt的观点,正确的解决方法是使用logrotate,因为它能帮助我们调试导致报告的初始问题。然而,解决该问题并不会阻止exim或其邮件代理程序继续发送报告,这需要使用logrotate或删除操作。