logrotate 不会自动轮换我的日志

logrotate 不会自动轮换我的日志

我有两个不同的 Debian 机器(i386 和 AMD),有同样的问题。logrotate 不会自动轮换我的日志。当我手动强制轮换时,它可以正常工作,例如

/usr/sbin/logrotate -f /etc/logrotate.conf

但我不太适合。

设置没有被修改(至少我没有修改它们),AMD 盒子是全新安装的但无法完成它的工作。

如果您注意到类似的问题,请帮助我。

更新(一些服务器输出):

logrotate -d http://pastebin.com/e6AshtGq

ls -l /var/log http://pastebin.com/Y2A4Li59

cat /etc/logrotate.conf http://pastebin.com/1h7Uwctr

ls -l /etc/logrotate.d http://pastebin.com/NvUAeszM

答案1

检查你的 logrotate 是否由 cron 运行。

编辑:

从评论讨论来看 - 似乎 cron 不能正常工作。我的 crontab 中有一个没有用户的 cronjob,但只有当我重新启动 cron 守护进程时,这个问题才会出现

我的 ubuntu 和 centos 系统有一个/etc/cron.daily/logrotate文件,其内容是

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

我的 /etc/crontab 中有以下行来运行日常任务

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily 

答案2

我遇到了类似的问题,但crontab可以正常工作,并且对于某些日志目录logrotate有效,但对于某些目录无效。当我尝试手动运行 logrotate 时,我收到了一些错误消息。

user@server:/var/log/apache2$ sudo /usr/sbin/logrotate -f /etc/logrotate.conf
error: error creating output file /var/log/apache2/access.log.1.gz: File exists
error: error creating output file /var/log/apache2/error.log.1.gz: File exists
...

所有*.1.gz文件的大小都是 0。我手动删除了错误消息中提到的所有文件,sudo /usr/sbin/logrotate -f /etc/logrotate.conf再次运行,一切正常。

我只是觉得我也应该在这里分享这个替代解决方案,因为这是我在搜索问题时出现的第一个搜索结果,但建议的解决方案对我来说不起作用。也许这也能帮助那些和我处境相同的人。

答案3

我知道我知道。5年前的帖子。

只是想如果它在搜索中仍然排名很高,我会贡献并给出我遇到的问题的解决方案。我的一台服务器上没有自动处理我的 logrotate 作业。强制轮换工作正常。我在手动运行每日轮换命令后想出了一个解决方案:

( cd / && run-parts --report /etc/cron.daily )

然后我看到了导致 logrorate 作业停止执行的错误:

/etc/cron.daily/logrotate:
error: iptraf-ng:2 duplicate log entry for /var/log/iptraf/*.log

是的,就这么简单。我有两个文件定义了相同的日志进行轮转(iptraf 和 iptraf-ng)。只需删除 iptraf 的一个冲突的 logrotate 定义即可。

rm /etc/logrotate.d/iptraf

另一个问题可能是 /etc/crontab 文件有问题。这意味着要仔细检查该文件的语法,因为如果语法错误,它不会提供任何我能找到的输出。语法验证失败后静静退出。

希望这可以为某些人节省一些时间。

答案4

随着服务的变化,我发现这种情况经常发生,并且 logrotate 中使用的选项已被删除,导致 logrotate 每天都会失败。

给你一个想法,最后一个修复涉及通知空apache logrotate 文件中的选项不再有效,进而导致 logrotate 完全停止。

虽然这个问题已经在一定程度上被讨论过了,但我还是想分享一下我在追踪这些问题时所经历的过程:

  1. 首先运行#/usr/sbin/logrotate -f /etc/logrotate.conf以查找任何错误(例如 postfix:3'missingok'。)
    它所指的文件和行号是logrotate.d文件夹中的文件。
  2. 编辑有问题的文件:# vi /etc/logrotate.d/postfix,删除导致问题的选项,然后保存文件。
  3. 重复第一步,看看旋转是否有效,或者是否存在其他问题。

有时第一步只是输出任何内容,但您知道存在问题。由于整个事情的开始是因为服务的日志文件没有被轮换,因此您可以观察 logrotate 进程以查找该特定服务,看看是什么阻止了它轮换。为此,请在 logrotate 命令中添加详细标签,并观察该文件夹中发生了什么(如果有的话)。

相关内容