![如何让 logrotate 在旋转时考虑文件大小](https://linux22.com/image/787978/%E5%A6%82%E4%BD%95%E8%AE%A9%20logrotate%20%E5%9C%A8%E6%97%8B%E8%BD%AC%E6%97%B6%E8%80%83%E8%99%91%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F.png)
假设我想在文件大小为 1kb 时进行 logrotate。运行之前,如果日志文件大小为 4kb,我预计 logrotate 将创建 4 个不同的日志文件。
前:
something.log (4kb)
我期望发生什么。
something.log (0kb)
something.log.1 (1kb)
something.log.2 (1kb)
something.log.3 (1kb)
something.log.4 (1kb)
但目前发生的事情是
something.log (0kb)
something.log.1 (4kb)
尽管我已经将尺寸指定为 1k。
读取日志的程序无法处理大于一定大小的文件,所以我想使用 logrotate 来检查大小。
我正在使用的 logrotate 配置文件示例
/pathme/something/data/*/logs/*.log {
su username1 username1
missingok
rotate 10
notifempty
size 1k
copytruncate}
答案1
默认情况下,Logrotate 每天仅由 cron 运行一次,请查看其配置并采取相应措施。如果日志文件在(比如说)下午超出了您在 logrotate 配置中指定的最大大小,则 logrotate 不会对其采取任何措施,直到它运行为止。这通常发生在午夜左右。
如果您需要精确地确定日志文件的大小,我建议您更频繁地运行 logrotate(每小时、每 30 分钟或其他),然后将 logrotate 配置为小于所需最大大小的值,以避免日志文件变得太大而导致程序无法读取它们。
您没有指定操作系统,但日常系统 cron 作业通常是/etc/cron.daily
或类似的。