【问题标题】:Size rule not working in logrotate大小规则在 logrotate 中不起作用
【发布时间】:2018-07-29 18:41:59
【问题描述】:

我为我们的 docker 日志创建了一个 log-rotate 选项,它工作正常。这是配置文件

*root@aerogear:/var/lib/docker/containers/b8da13f8dc6cb642959103c23db2a02ef2c7291ae5f94625a92ac9329db1647e# cat /etc/logrotate.d/docker-container
/var/lib/docker/containers/*/*.log {
  rotate 7
  hourly
  compress
  size=100M
  missingok
  delaycompress
  copytruncate
}*

似乎每小时 logrotate 工作正常。但是由于一些错误,这个日志文件增加到了 18G,因为size=100M 规则在这种情况下不起作用。你知道有什么具体原因吗?

【问题讨论】:

    标签: linux ubuntu logrotate


    【解决方案1】:
    • size 后面不应有等号。
    • 如果您想在文件增长到大于100M 时同时旋转,那么您应该使用maxsize 而不是size

    所以你应该试试maxsize 100M 而不是size=100M

    【讨论】:

      【解决方案2】:

      正如 Ronan 所说,sizehourly 是“矛盾的”。可以使用其中一个,但很可能有一个优先,因此您需要改用maxsize

      下一步:

      通常,logrotate 作为每日 cron 作业运行。它不会在一天内多次修改日志,除非该日志的标准基于日志的大小并且 logrotate 每天运行一次以上,或者除非使用了 -f--force 选项。

      (来自 logrotate 手册页)

      在标准 Ubuntu 安装中,logrotate 每天运行一次。如果你看一下cron安装,你会在cron.daily目录下看到logrotate

      prompt$ ls -l /var/cron.daily
      ...
      -rwxr-xr-x 1 root root  372 May  6  2015 logrotate
      ...
      

      cron.hourly下面什么都没有:

      prompt$ ls -l /var/cron.hourly
      (nothing)
      

      这表明logrotatehourly 设置不会比默认设置上的daily 设置响应更多。当然,您可以更改它并让logrotate 每小时甚至每分钟运行一次(在最后一种情况下,您需要root 的crontab)。但默认情况下,带有hourlydaily 设置的maxsize 没有用,因为无论如何文件每次都会旋转,无论大小。

      还有logrotate 的版本,其中maxsize 参数不起作用。这在较新的版本中应该不是问题。

      正如罗南所说,选项和价值之间没有= 符号。

      【讨论】:

      • 为什么 logrotate 的每小时设置不会比每日设置响应更多?如果我们将 logrotate 脚本移动到 /cron.hourly 会怎样?
      • @Ryanw 是的。我提到您可以将脚本移动为每小时甚至每分钟运行一次。要运行一分钟,您需要将脚本移动到其他地方(可能是/root)并为此使用根crontab,但如果您有很多日志,可能会太多——一个巨大的I/O 猪。
      • 你知道为什么最大尺寸不适用于每小时设置吗?
      • @Ryanw 我更新了我的答案。我认为它会更容易理解。如果您使用hourly 并每小时运行一次 logrotate,那么文件将每小时轮换一次,无论大小如何。因此,拥有该参数将无济于事(这只是噪音)。
      猜你喜欢
      • 1970-01-01
      • 2015-12-20
      • 2022-01-13
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多