按大小对数旋转 - 我需要更改 cron 吗?

Hom*_*ith 14 logrotate cron

我当前的 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每天运行多次,或者除非使用了-for--force选项。

如果你想logrotate每小时而不是每天运行,你可以移动它:

mv /etc/cron.daily/logrotate /etc/cron.hourly
Run Code Online (Sandbox Code Playgroud)

从 3.8.1 开始,maxsize. size和之间的区别在maxsize这里描述:

maxsize 尺寸

当他们长大大于大小字节甚至另外指定的时间间隔之前(日志文件被旋转dailyweeklymonthly,或yearly)。相关size选项类似,只是它与时间间隔选项互斥,并且它会导致日志文件轮换而不考虑上次轮换时间。当 maxsize被使用,无论是大小和日志文件的时间戳被考虑。

这将使两者都适合您的使用:size没有任何间隔,maxsize如果还需要间隔。但是,这并没有改变默认情况下logrotate仅每天运行的事实。该间隔适用于大多数情况,因为在大多数情况下,日志增长所需的时间比一天长得多250M