logrotate如何精确处理“每日”?


30

从我系统上的时间戳来看,当logrotate由cron运行时,logrotate会每天进行日志轮换。但是,如果我早于运行它,则不会旋转文件。logrotate如何知道是否应该旋转它们,保留历史记录或使用时间戳记?

Answers:


32

我相信这是状态文件的内容,我的情况是这样/var/lib/logrotate.status。每个文件都有一行,这是文件的最后旋转日期。如果运行logrotate的日期是给定文件的到期日期,则考虑到当前日期和文件中日期之间的天数(每天1天,每周7天,依此类推),文件将被轮换。

logrotate似乎并不关心它在一天中的什么时间运行;即使它通常在2355上运行,但如果您改为在0130上运行,它仍会轮换每天标记的文件,最后一次是昨天完成的文件;但是这样做会把今天的日期放到状态文件中(与所有轮换文件相对),因此第二次运行在2355上将无济于事。


1
嗯。所以它仅/var/lib/logrotate/status在以下情况下旋转:当前日期>日期(因为文件在我的情况下)。
凯尔·布​​兰特

2
我认为,自从上次运行以来已经过了24个小时,它什么也不做,通过检查状态文件的mtime可以得出结论。一旦决定了一整天过去了,并且它可能合法地做任何事情,它就会根据文件中的日期字段来进行每日,每周等决策。
MadHatter支持Monica 2010年

4
好吧,它似乎使用该文件中的日期。我将一天放回状态文件中并运行它...它轮换了..
凯尔·布​​兰特

刚回去戳了一下我的logrotate,我认为我错了,你上面写的是对的。它通过查看状态文件的时间戳来确定它是否今天已经运行;如果没有,它将继续从状态文件中提取上次轮换的日期,并采取相应的措施。我只是想用vi进行logrot,然后触摸-t以说服它最后一次运行于昨天的2355,当时它旋转了我的munin原木。再次运行它,即使不到24小时,它仍将它们轮换出来并相应地更新了状态文件。
MadHatter

考虑到我刚刚进行的测试,我已经对当前的理解进行了更新(从星期天开始,将munin日志切片八种方法,但是谁在乎呢!)。
MadHatter支持Monica 2010年

11

从logrotate手册页:

通常,logrotate作为日常cron作业运行。除非该日志的标准基于日志的大小并且每天要运行logrotate多次,或者除非使用了-f或-force选项,否则它一天之内不会修改日志多次。


1
看看cron.daily何时运行到这里
Trevor Boyd Smith,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.