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

cwd*_*cwd 28 linux logrotate

根据Unix和Linux管理手册和man,logrotate的有选项dailyweekly以及monthly,但有一种方法来添加一个hourly选项?

本博客文章中提到,您可以设置size 1和删除的时间选项(如:daily),然后手动调用logrotatecron-我想是这样

logrotate -f /etc/logrotate.d/my-hourly-file
Run Code Online (Sandbox Code Playgroud)

但是有没有更优雅的每小时轮换日志的解决方案?

Nil*_*ils 24

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

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

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

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

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


小智 10

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

dpkg-divert --add --rename --divert /etc/cron.hourly/logrotate /etc/cron.daily/logrotate
Run Code Online (Sandbox Code Playgroud)