根据我系统上的时间戳判断,当 logrotate 由 cron 运行时,logrotate 会进行每日日志轮换。但是,如果我在此之前运行它,它不会轮换文件。logrotate 如何知道是否应该轮换它们,它是保留历史记录还是使用时间戳?
答案1
我相信这是状态文件的内容,我的情况是/var/lib/logrotate.status
。每个文件都有一行,即上次轮换的日期;如果您在给定文件需要轮换的日期运行 logrotate,给定当前日期和文件中的日期之间的天数(1 表示每日,7 表示每周,等等),则文件将被轮换。
logrotate 似乎并不关心它在一天中的什么时间运行;即使它通常在 2355 运行,如果您改为在 0130 运行它,它仍然会轮换标记为每日且最后完成于昨天的文件;但这样做之后,它会将今天的日期放入状态文件中(针对任何轮换的文件),因此在 2355 第二次运行不会执行任何操作。
答案2
来自 logrotate 手册页:
通常,logrotate 以每日 cron 作业的形式运行。它不会在一天内多次修改日志,除非该日志的标准基于日志的大小并且 logrotate 每天运行多次,或者除非使用了 -f 或 -force 选项。
答案3
它按计划运行crontab
。您只需找到crontab
已配置的计划即可logrotate
。通常,它位于每日中/etc/cron.daily/
。通用 crontab 计划可在 中找到/etc/crontab
。
示例如下:
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly```