logrotate 如何准确处理“每天”?

Kyl*_*ndt 37 linux logrotate

根据我系统上的时间戳判断,当 logrotate 由 cron 运行时,logrotate 会进行每日日志轮换。但是,如果我在此之前运行它,它不会旋转文件。logrotate 如何知道是否应该旋转它们,它是否保留历史记录或使用时间戳?

Mad*_*ter 37

我相信这是状态文件的内容,我的情况是/var/lib/logrotate.status. 每个文件有一行,它是上次轮换的日期;如果您在给定文件到期轮换的日期运行 logrotate,鉴于当前日期和文件中的日期之间的天数(每天 1 天,每周 7 天,等等),文件将被轮换。

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

  • 那么它似乎使用该文件中的日期。我在状态文件中设置了某一天并运行它......它旋转了...... (5认同)
  • 嗯..所以它只在以下情况下旋转:当前日期>`/var/lib/logrotate/status`中的日期(就像我的文件一样)。 (4认同)
  • 我认为它只会在自上次运行以来已经过去 24 小时的情况下执行任何操作,这是通过检查状态文件的 mtime 来解决的。一旦决定一整天过去并且它可以合法地做任何事情,它就会根据文件中的日期字段做出每日、每周等决定。 (3认同)

seb*_*ert 12

从 logrotate 手册页:

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