我当前的 logrotate 配置如下(使用 logrotate 3.8.7)
"/var/log/haproxy.log" {
daily
size 250M
rotate 1
create 644 root root
missingok
compress
notifempty
copytruncate
}
它每天成功运行一次,但当大小超过 250M 时,它不会轮换。因此,它会等到一天结束时再轮换,无论大小如何。
我读到有 maxsize 选项,但改掉之后size 250M
仍然maxsize 250M
不起作用。
我是否需要设置一个 cron 来每小时运行一次 logrotate,或者 logrotate 会因为正在监听该文件大小而自动运行,而我还有其他错误发生?
答案1
是的,你需要logrotate
每天运行多次才能实现这一点。手册页的第二段回答了这个问题logrotate
(8):
通常,
logrotate
它作为每日 cron 作业运行。它不会在一天内多次修改日志,除非该日志的标准基于日志的大小并且logrotate
每天运行多次,或者除非使用了-f
或选项。--force
如果您希望logrotate
每小时运行一次而不是每天运行一次,您可以移动它:
mv /etc/cron.daily/logrotate /etc/cron.hourly
从 3.8.1 开始,有了。和maxsize
之间的区别如下所述:size
maxsize
maxsize
尺寸如果日志文件的大小超过 size 字节,甚至在额外指定的时间间隔(
daily
、weekly
、monthly
或yearly
)之前,就会进行轮转。相关size
选项类似,只不过它与时间间隔选项互斥,并且会导致日志文件轮转而不考虑上次轮转时间。maxsize
使用 时,会同时考虑日志文件的大小和时间戳。
这将使两者都适合您的使用:size
无需任何间隔,maxsize
如果需要间隔。但是,这不会改变默认情况下logrotate
仅每天运行的事实。该间隔适合大多数人,因为在大多数情况下,日志的增长时间比一天要长得多250M
。