我有两个不同的 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 完全停止。
虽然这个问题已经在一定程度上被讨论过了,但我还是想分享一下我在追踪这些问题时所经历的过程:
- 首先运行
#/usr/sbin/logrotate -f /etc/logrotate.conf
以查找任何错误(例如 postfix:3'missingok'。)
它所指的文件和行号是logrotate.d文件夹中的文件。 - 编辑有问题的文件:
# vi /etc/logrotate.d/postfix
,删除导致问题的选项,然后保存文件。 - 重复第一步,看看旋转是否有效,或者是否存在其他问题。
有时第一步只是输出任何内容,但您知道存在问题。由于整个事情的开始是因为服务的日志文件没有被轮换,因此您可以观察 logrotate 进程以查找该特定服务,看看是什么阻止了它轮换。为此,请在 logrotate 命令中添加详细标签,并观察该文件夹中发生了什么(如果有的话)。