如何设置 logrotate 每小时轮换日志?

如何设置 logrotate 每小时轮换日志?

根据 Unix and Linux Administration Handbook 和man, logrotate 有dailyweekly、 和选项monthly,但是有没有办法添加hourly选项?

这篇博文提到您可以设置size 1和删除时间选项(例如:)daily,然后手动调用logrotate-cron我想类似

logrotate -f /etc/logrotate.d/my-hourly-file

但是是否有更优雅的解决方案可以每小时轮换日志呢?

答案1

取决于您的操作系统。一些(全部?)Linux 发行版有一个目录/etc/cron.hourly,您可以在其中放置每小时执行一次的 cron 作业。

其他人有一个目录/etc/cron.d/。您可以在那里放置要以任何特殊用户身份执行的 cron 作业,并使用 crontab 条目的常用 cron 设置(并且您必须指定用户名)。

如果您使用其中任何一个而不是标准日志轮换脚本,则应/etc/cron.daily/将该脚本复制到此处并cp /dev/null复制到原始位置。否则它将通过 logrotate 补丁更新重新激活。

为了正确地每小时轮换,还要注意dateext指令是不是放。如果是这样,默认情况下第一个旋转文件将获得当前日期的扩展名,例如 YYYYMMDD。然后,第二次 logrotate 将在同一天内激活,即使size超过阈值,它也会简单地跳过轮换。

原因是要旋转的文件的新名称已经存在,并且 logrotate 不会将内容追加到现有的旧文件中。例如,在 RHEL 和 CentOS 上,该dateext指令默认在/etc/logrotate.conf.删除或注释该行后,旋转的文件将简单地获得一个运行号作为扩展名,直到达到该rotate值。这样,一天可以进行多次轮换。

答案2

只是为了补充 Nils 的答案,如果更改logrotateDebian 或 Ubuntu 机器上脚本的位置,使用它可能更安全,dpkg-divert而不是仅仅复制文件并复制/dev/null到原始位置,例如:

dpkg-divert --add --rename --divert /etc/cron.hourly/logrotate /etc/cron.daily/logrotate

答案3

另一种选择是将 logrotate 命令添加到 crontab 列表中。然后它将每小时执行一次。

crontab -e

将以下行添加到 crontab 列表中

0 * * * * /usr/sbin/logrotate /etc/logrotate.d/my-hourly-file

答案4

任何人都会回到这个话题。 Logrotate 现在有每小时选项。您必须将 logrotate 脚本放入每小时的 cron 中,因为默认情况下它是每天的。不要忘记将其从每日 cron 中删除,因为它会在每天凌晨 3 点的同一小时内运行 2 次~。 (默认 cron.daily 时间 afai

https://github.com/logrotate/logrotate

相关内容