Logrotate:按特定大小轮换所有日志文件并每小时轮换一次

Logrotate:按特定大小轮换所有日志文件并每小时轮换一次

我在 ubuntu 上的 logrotate 文件每天运行。我想确保它每小时轮换一次日志文件,以免出现磁盘已满错误。所以我的 logrotate 文件在 cron.daily 文件夹中,只需将其移动到 cron.hourly 就足够了吗?

我还想将最大日志文件大小保持在 5MB,但我不确定在 logrotate.cnf 中要更改什么。

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

每周轮换 4 创建包括 /etc/logrotate.d

/var/log/wtmp { missingok 每月创建 0664 root utmp rotate 1 }

/var/log/btmp { missingok 每月创建 0660 root utmp rotate 1 }

我知道我必须使用尺寸 5M,但我应该把它写在哪里?我认为第一行适用于所有日志文件,第二行和第三行仅适用于 wtmp 和 btmp,这样好吗?所以如果我的逻辑正确,那么我必须写尺寸 5M总的来说,我说得对吗?

答案1

为了使其发挥作用,cron 脚本的运行频率必须至少与您想要轮换文件的频率相同。即使您目前每天运行一次脚本(来自 cron.daily),它也只会每周更改一次文件(weeklylogrotate 脚本中的关键字设置默认值,在 wtmp 和 btmp 的情况下,这将被覆盖为每月一次)。

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

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 }

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

答案2

对我来说,一种不太优雅的方法 - 根据文件大小每小时运行 logrotate 执行以下操作;

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

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

2)更新 /etc/cron.hourly/logrotate 文件;注释并替换最后一行,如下所示

#/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 文件中写入以下逻辑(根据您的要求更新文件夹路径和大小)

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

相关内容