我们看到我们 /var/lib/logrotate/status
得到了无效的条目,如下所示:
saurabh@1236:~$ cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/syslog" 2018-3-13
"/var/log/auth.log" 2018-3-13
"/var/log/debug" 2018-3-13
"/var/log/lpr.log" 2018-3-13
"/var/log/user.log" 2018-3-13
"/var/log/mail.info" 2018-3-13
"/var/log/cron.log" 2018-3-13
og/messages" 2018-3-13 <=== Corrupted entry
"/var/log/cron.log" 2018-3-13
"/var/log/messages" 2018-3-13
不知道这是如何以这种方式损坏的。它在 10/12 天后随机发生。
我的猜测是,这可能是因为多个 crons 编辑了这个文件,这导致了这个问题,因为多个试图编辑这个文件,但我不确定这可能是问题所在。为了测试我在最近添加的一个 cron 中添加了一些随机延迟,如下所示:
*/10 * * * * root sleep $(expr $RANDOM \% 90); /usr/sbin/logrotate -f /etc/logrotate.d/myFile
对于具体的解决方案有什么更好的建议吗?
您的机器上有多个
logrotate
由 cron 作业运行的并发实例。使用的状态文件没有锁定,因此不同的logrotate
作业在更新它时会“互相踩踏”。由于您在目录中添加了
myFile
配置,因此您不必在单独的 cron 作业中显式轮换它们。通常的cron 作业运行会自动获取该配置。logrotate
/etc/logrotate.d
logrotate
如果您需要比系统的默认日志轮换更频繁地运行轮换,我建议将
myFile
配置放在其他位置。要确保您的轮换作业不使用相同的状态文件(在轮换作业可能与系统的日志轮换作业同时运行的情况下),请使用另一个状态文件:
请注意,该作业不需要以 root 身份运行,除非日志文件由 root 或您以外的某个用户拥有。换句话说,如果日志文件属于您,您可以在个人 cron 作业中进行轮换。