根据 Unix and Linux Administration Handbook 和man
, logrotate 有daily
、weekly
、 和选项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 的答案,如果更改logrotate
Debian 或 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