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