按大小进行 logrotate - 我需要更改 cron 吗?

按大小进行 logrotate - 我需要更改 cron 吗?

我当前的 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之间的区别如下所述:sizemaxsize

maxsize尺寸

如果日志文件的大小超过 size 字节,甚至在额外指定的时间间隔(dailyweeklymonthlyyearly)之前,就会进行轮转。相关size选项类似,只不过它与时间间隔选项互斥,并且会导致日志文件轮转而不考虑上次轮转时间。 maxsize使用 时,会同时考虑日志文件的大小和时间戳。

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

相关内容