来自 logrotate 的手册页:
最小尺寸 尺寸
当日志文件的大小超过 size 字节时,会进行轮转,但不会早于额外指定的时间间隔(每日、每周、每月或每年)。相关的 size 选项类似,只是它与时间间隔选项互斥,并且会导致日志文件轮转而不考虑上次轮转时间。使用 minsize 时,会同时考虑日志文件的大小和时间戳。尺寸 尺寸
当日志文件的大小超过 size 字节时,它们将被轮换。如果 size 后面跟着 k,则大小将以千字节为单位。如果使用 M,则大小将以兆字节为单位;如果使用 G,则大小将以千兆字节为单位。因此,size 100、size 100k、size 100M 和 size 100G 都是有效的。
我设置尺寸作为500 万和间隔作为每周认为日志将按周轮换,如果日志大小超过 5M,则会发生额外的轮换。但实际情况是,除非日志超过 5M,否则不会轮换,这似乎就是最小尺寸是应该做的。
我对手册的理解有误吗?如果日志超过 5M,我该如何让日志每周轮换一次?
编辑:
我不确定以下信息是否相关,但仅作为补充:
我使用 rsyslog 进行消息、安全、cron、maillog、启动的主要日志记录。以下是倒数第二个日志的轮换日期和文件大小,其中大小和间隔设置如上所述:
filename rotation date file size
messages 20130129 5.3MB
secure 20130113 5.1kB
cron 20130113 3.6kB
maillog 20130113 1.1kB
正如所见,只有消息被轮换。
编辑2:
我应该咨询一下man logrotate
。他们实际上升级了最大尺寸选项。这应该是我所寻找的:
最大尺寸 尺寸
如果日志文件的大小超过 size 字节,甚至在额外指定的时间间隔(每日、每周、每月或每年)之前,就会进行轮转。相关的 size 选项类似,只不过它与时间间隔选项互斥,并且会导致日志文件轮转而不考虑上次轮转时间。使用 maxsize 时,会同时考虑日志文件的大小和时间戳。
答案1
这里回答了一些问题: 每日日志轮换及其大小?
通常logrotate
每天只运行一次,因此大小限制不会得到完全遵守。logrotate
的状态文件(可能/var/lib/logrotate.status
)仅存储日期(而不是时间),它不打算更频繁地使用,因此您不能更频繁地轮换文件(更新:版本 3.85 添加每小时支持,并在状态文件中存储完整的时间戳。)
你没说syslogd
你用的是哪一个,rsyslog和系统日志工具支持基于自我管理大小的轮换,因此您应该能够按大小轮换它们,并logrotate
每周轮换一次(尽管可能需要对文件命名进行一些思考,以确保同时进行文件轮换不会意外删除某些内容)。
另一个选项是使用管道日志,就像 Apache 一样,事实上 Apache-2.4rotatelogs
完全支持此功能(以前的版本仅支持独立的大小或时间)。您没有说明日志来自何处,但您可能能够记录到管道或 fifo,并使用(rotatelogs
如果支持的话)。
对于logrotate
<= v3.8.0,支持的三种场景是:
size
按大小轮换,每天最多一次,无论经过多长时间- 按时间段无条件旋转(即
daily
、weekly
、monthly
、yearly
),无论大小 minsize
&时间段 如果日志文件大小超过最小大小,则按时间段轮换(`notifempty 是这种情况的特例)
logrotate
v3.8.1 增加:
maxsize
&时间段 当大小超过最大大小时,或者经过一段时间后,进行旋转。logrotate
在这种情况下,可能需要每天运行一次以上默认值。
logrotate
v3.8.5 增加:
hourly
时间段支持,并在状态文件中存储完整的时间戳。您应该logrotate
(至少)每小时运行一次才能使其正常工作。