Logrotate:旋转特定大小的所有日志文件并每小时旋转一次

我在Ubuntu的logrotate文件每天运行。 我想确保它的旋转日志文件在每个小时得到没有完整的磁盘错误了。 所以我的logrotate文件是在cron.daily文件夹中,简单地移动到cron.hourly就足够了吗?

我也想保持我的最大日志文件大小在5MB,但林不知道该怎么改变在logrotate.cnf。

logrotate.cnf内容(不含换行符):

每周轮换4次创buildinclude /etc/logrotate.d

/ var / log / wtmp {missingok每月创build0664根utmp旋转1}

/ var / log / btmp {missingok每月创build0660根utmp旋转1}

我知道我必须使用5M大小 ,但我应该在哪里写? 我是否认为第一行是所有日志文件,第二行和第三行是只有wtmp和btmp? 所以如果我的逻辑是正确的,那么我必须在所有行中写入5M的大小 ,对吗?

为了使其具有任何效果,cron脚本必须至less按照您想要旋转文件的频率运行。 即使您目前每天运行一次脚本(来自cron.daily),它只会每周更改一次文件(logrotate脚本中的weekly关键字设置为默认值,在wtmp的情况下会将其覆盖为每月一次) BTMP)。

我最近的Linux机器上的logrotate版本只能达到每天的持续时间(尽pipe设置大小限制会强制文件被更频繁地旋转)。 话虽如此,对于大多数服务器来说,日志轮换是破坏性的; 如果您的目标是节省空间,那么保留较less的历史文件并对其进行压缩可能更为合适:

 daily rotate 2 compress size 5M create include /etc/logrotate.d /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0660 root utmp rotate 1 } 

(请注意,如果第一行的更改被其他地方覆盖,则第一行的更改将不起作用。)

一个非常优雅的方式为我工作 – 根据文件大小每小时运行一次logrotate,执行以下操作:

1)将Logrotate脚本从cron.daily文件夹复制到cron.hourly文件夹中

 cp /etc/cron.daily/logrotate /etc/cron.hourly/ 

2)更新/etc/cron.hourly/logrotate文件; 注释并replace最后一行如下

 #/usr/sbin/logrotate /etc/logrotate.conf /usr/sbin/logrotate /etc/logrotate.d/logstash 

3)更新相关的/ etc / crontab项如下(如果需要)

 #17 * * * * root cd / && run-parts --report /etc/cron.hourly 59 * * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.hourly ) 

4)最后在logrotate conf文件中写入以下逻辑(根据需要更新文件夹path和大小)

  cat /etc/logrotate.d/logstash /var/log/logstash/*.log /var/log/logstash/*.err { hourly size 10M rotate 4 copytruncate compress #delaycompress missingok notifempty }