Centos / Linux设置logrotate为所有日志的最大文件大小

时间:2013-11-23 12:15:46

标签: linux centos logrotate

我们使用logrotate并且它每天都运行...现在我们遇到了一些日志显着增长的情况(阅读:gigbaytes)并杀死了我们的服务器。所以现在我们想要将最大文件大小设置为日志....

我可以将它添加到logrotate.conf吗?

  

尺寸50M

然后它会应用于所有日志文件吗?或者我是否需要在每个日志的基础上设置它?

还是其他任何建议?

(ps。据我所知,如果你想得到通知,日志会像描述的那样增长,我们想要做的事情并不理想 - 但是因为没有可用的空间而不能再登录了< / p> 谢谢,肖恩

2 个答案:

答案 0 :(得分:78)

正如Zeeshan所述,logrotate选项sizeminsizemaxsize是轮换的触发器。

为了更好地解释它。您可以根据需要随时运行logrotate,但除非达到阈值,例如达到文件大小或通过适当的时间,否则不会轮换日志。

大小选项无法确保您的旋转日志也具有指定的大小。要使它们接近指定的大小,您需要经常调用logrotate程序。这很关键。

对于非常快速构建的日志文件(例如,每天数百MB),除非您希望它们非常大,否则您需要确保经常调用logrotate!这很关键。

因此,要阻止磁盘填满数GB的日志文件,您需要确保经常调用logrotate,否则日志轮换将无法正常工作。

在Ubuntu上,您可以通过将脚本/etc/cron.daily/logrotate移动到/etc/cron.hourly/logrotate

轻松切换到每小时轮换

或添加

*/5 * * * * /etc/cron.daily/logrotate 

到/ etc / crontab文件。每5分钟运行一次。

size选项会忽略每日,每周,每月时间选项。但是minsize&amp; maxsize考虑到它。

手册页有点令人困惑。这是我的解释。

minsize仅在文件达到合适的尺寸并且已经过了设定的时间段时才会轮换。 ,例如每天50MB + 如果文件在每日时间之前达到50MB,那么它将一直持续到第二天。

maxsize将在日志达到设定的大小或已经过了适当的时间后轮换。 例如maxsize每天50MB +。 如果文件是50MB并且我们还没有在第二天,则日志将被轮换。如果文件只有20MB,我们翻转到第二天,那么文件将被轮换。

当日志&gt;

size会旋转尺寸。无论是否指定每小时/每日/每周/每月。 因此,如果您的大小为100M - 则表示您的日志文件是&gt;如果在此条件为真时运行logrotate,则将旋转100M日志。旋转后,主日志将为0,后续运行将不执行任何操作。

所以在op的情况下。特别是50MB最大值我使用如下内容:

/var/log/logpath/*.log {
    maxsize 50M
    hourly
    missingok
    rotate 8
    compress
    notifempty
    nocreate
}

这意味着他最多可以创建8小时的日志。其中有8个,每个不超过50MB。由于他说他每天都会获得数千兆字节,并假设他们以相当稳定的速度积累,并且使用了maxsize,他最终将接近每个文件达到的最大值。 。所以它们每个可能接近50MB。鉴于他们构建的量,他需要确保logrotate经常运行足以满足目标大小。

由于我每小时都在那里,我们需要logrotate至少每小时运行一次。但是,因为他们每天建立2千兆字节,我们想要50MB ......假设每小时的速率为83MB。所以你可以想象如果我们每小时运行一次logrotate,尽管将maxsize设置为50,那么在这种情况下我们最终会得到83MB的log。因此,在这种情况下,将运行设置为每30分钟或更短时间就足够了。

确保每隔30分钟运行一次logrotate。

*/30 * * * * /etc/cron.daily/logrotate 

答案 1 :(得分:61)

指定触发旋转的日志文件的大小。例如,一旦文件大小为50MB或更大,size 50M将触发日志轮换。您可以使用后缀M表示兆字节,k表示千字节,G表示千兆字节。如果没有使用后缀,则将其视为字节。您可以在最后查看示例。有三个指令可用sizemaxsizeminsize。根据{{​​3}}:

minsize size
              Log  files  are  rotated when they grow bigger than size bytes,
              but not before the additionally specified time interval (daily,
              weekly,  monthly, or yearly).  The related size option is simi-
              lar except that it is mutually exclusive with the time interval
              options,  and  it causes log files to be rotated without regard
              for the last rotation time.  When minsize  is  used,  both  the
              size and timestamp of a log file are considered.

size size
              Log files are rotated only if they grow bigger then size bytes.
              If size is followed by k, the size is assumed to  be  in  kilo-
              bytes.  If the M is used, the size is in megabytes, and if G is
              used, the size is in gigabytes. So size 100,  size  100k,  size
              100M and size 100G are all valid.
maxsize size
              Log files are rotated when they grow bigger than size bytes even before
              the additionally specified time interval (daily, weekly, monthly, 
              or yearly).  The related size option is  similar  except  that  it 
              is mutually exclusive with the time interval options, and it causes
              log files to be rotated without regard for the last rotation time.  
              When maxsize is used, both the size and timestamp of a log file are                  
              considered.

以下是一个例子:

"/var/log/httpd/access.log" /var/log/httpd/error.log {
           rotate 5
           mail www@my.org
           size 100k
           sharedscripts
           postrotate
               /usr/bin/killall -HUP httpd
           endscript
       }

以下是文件/var/log/httpd/access.log/var/log/httpd/error.log的说明。只要它们的大小超过100k,它们就会被轮换,旧的日志文件在经过5次旋转后被邮寄(未压缩)到www@my.org,而不是被删除。 sharedscripts表示postrotate脚本只会运行一次(在旧日志被压缩之后),而不是每个被轮换的日志运行一次。请注意,本节开头的第一个文件名周围的双引号允许logrotate旋转名称中带有空格的日志。正常的shell引用规则适用,支持,\个字符。