正如 Zeeshan 所述,logrotate 选项size
、minsize
、maxsize
是旋转的触发器。
为了更好地解释它。您可以随意运行 logrotate,但除非达到阈值,例如达到文件大小或经过适当的时间,否则不会轮换日志。
大小选项不能确保您的轮换日志也具有指定的大小。要使它们接近指定的大小,您需要足够频繁地调用 logrotate 程序。这很关键。
对于快速建立的日志文件(例如每天数百 MB),除非您希望它们非常大,否则您需要确保经常调用 logrotate!这很关键。
因此,要阻止磁盘被数 GB 的日志文件填满,您需要确保足够频繁地调用 logrotate,否则日志轮换将无法如您所愿。
在 Ubuntu 上,您可以通过将脚本 /etc/cron.daily/logrotate 移动到 /etc/cron.hourly/logrotate 轻松切换到每小时轮换
或添加
*/5 * * * * /etc/cron.daily/logrotate
到您的 /etc/crontab 文件。每 5 分钟运行一次。
该size
选项忽略每日、每周、每月时间选项。但是 minsize 和 maxsize 考虑到了这一点。
手册页在那里有点混乱。这是我的解释。
minsize
仅当文件达到适当的大小并且经过设置的时间段时才旋转。 例如 minsize 50MB + daily 如果文件在每日时间结束前达到 50MB,它会一直增长到第二天。
maxsize
当日志达到设定的大小或经过适当的时间时,将轮换。
例如 maxsize 50MB + 每天。如果文件是 50MB 并且我们还没有到第二天,则日志将被轮换。如果文件只有 20MB 并且我们滚动到第二天,那么文件将被轮换。
size
当日志 > 大小时将旋转。无论是否指定了每小时/每天/每周/每月。因此,如果您的大小为 100M - 这意味着当您的日志文件大于 100M 时,如果在此条件为真时运行 logrotate,则日志将被轮换。一旦它旋转,主日志将为 0,随后的运行将不执行任何操作。
所以在op的情况下。特别是最大 50MB 我会使用类似以下的东西:
/var/log/logpath/*.log {
maxsize 50M
hourly
missingok
rotate 8
compress
notifempty
nocreate
}
这意味着他最多可以创建 8 小时的日志。其中有 8 个,每个不超过 50MB。因为他说他每天都会获得数 GB 的数据,并假设它们以相当恒定的速度增加,并且使用了 maxsize,他最终将接近每个文件达到的最大值。因此,它们每个可能接近 50MB。考虑到他们构建的体积,他需要确保 logrotate 的运行频率足以满足目标大小。
由于我每小时都放在那里,我们需要 logrotate 至少每小时运行一次。但是由于它们每天增加 2 GB,而我们想要 50MB……假设恒定速率为每小时 83MB。所以你可以想象,如果我们每小时运行一次 logrotate,尽管将 maxsize 设置为 50,在这种情况下我们最终会得到 83MB 的日志。因此,在这种情况下,将运行设置为每 30 分钟或更短时间就足够了。
确保每 30 分钟运行一次 logrotate。
*/30 * * * * /etc/cron.daily/logrotate