/var/lib/logrotate/status 获取无效条目

/var/lib/logrotate/status 获取无效条目

我们看到我们的 /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 天后随机发生。

我的猜测可能是因为多个 cron 编辑此文件,这导致了此问题,因为多次尝试编辑此文件,但我不确定这可能是问题所在。为了测试我是否在最近添加的 cron 之一中添加了一些随机延迟,如下所示:

*/10 * * * * root sleep $(expr $RANDOM \% 90); /usr/sbin/logrotate -f /etc/logrotate.d/myFile

对于具体的解决方案有更好的建议吗?

答案1

您的计算机上有多个logrotatecron 作业正在运行的并发实例。所使用的状态文件没有锁定,因此不同的logrotate作业在更新它时会“踩到对方的脚趾”。

由于您在目录中添加了myFile配置,因此不必在单独的 cron 作业中显式轮换它们。通常的cron 作业运行会自动获取该配置。logrotate/etc/logrotate.dlogrotate

如果你需要为了比系统默认日志轮换更频繁地运行轮换,我建议将myFile配置放在其他地方。

为了确保您的轮换作业不使用相同的状态文件(在轮换作业可能与系统的日志轮换作业同时运行的情况下),请使用另一个状态文件:

/usr/sbin/logrotate -f -s /some/location/myFile.state /some/location/myFile

请注意,该作业不需要以 root 身份运行,除非日志文件由 root 或除您之外的其他用户拥有。换句话说,如果日志文件属于您,您可以在个人 cron 作业中进行轮换。

相关内容