使用logrotate进行文件的每小时轮换?

79

我尝试设置位于/tmp/hr_logs/的日志文件的日志轮换。为了设置它,我在Linux中使用了logrotate,并且我能够使用以下配置在我的/etc/logrotate.conf上每天进行轮换。

  /tmp/hr_logs {
  daily
  rotate 4

使用这个配置,文件将按日轮换,并且系统将保留4个附有日期的日志文件副本[格式:-YYYYMMDD]

现在,我正在尝试设置一组不同的日志文件,我需要按小时轮换,因此我已经在logrotate.conf中进行了配置:

  /tmp/last_logs {
  hourly
  rotate 4

但这根本没有起作用?有谁可以指导我一下吗?


https://blog.sleeplessbeastie.eu/2018/07/11/how-to-execute-logrotate-every-hour/ - Vishrant
2个回答

103
logrotate.conf的手册中提供了一个有关hourly选项的重要建议:

日志文件每小时轮换一次。请注意,通常情况下,logrotate的配置是在cron每日运行。您需要更改此配置并运行logrotate每小时才能真正按小时旋转日志。

正如yellow1pl所指出的,解决方法是将文件/etc/cron.daily/logrotate复制到/etc/cron.hourly/目录中。这至少适用于Debian和可能一些派生版本。

3
这也适用于CentOS。 - EminezArtus
10
复制还是移动文件?另外,我不应该在 /etc/logrotate.conf 中将 "daily" 改为 "hourly" 吗? - Mario Mey
4
如果脚本有更新,我会进行符号链接以便继承任何更改。同时,如果你使用了dateext选项,你需要重新格式化扩展名,这样你每天就可以拥有多个唯一的文件名。 我使用以下设置:dateext dateformat -%Y%m%d-%s - krad
5
我使用的符号链接命令是:ln -s /etc/cron.daily/logrotate /etc/cron.hourly/logrotate - Roland Pihlakas
这适用于RedHat,但至少在RH8上,您需要执行sudo semanage permissive -a logrotate_t或者否则/etc/cron.hourly/logrotate将无权编辑日志文件,无论每日版本如何。我没有尝试使用符号链接。我不知道SELinux是否有区别。 - aalku
Cron已经过时了:systemctl edit --full logrotate.timer - wick

26

每天都有/etc/cron.daily/logrotate脚本用于日志轮换。然而,/etc/cron.hourly/目录默认没有这样的脚本。复制该脚本即可正常使用。


1
如建议所述,我已将logrotate复制到/etc/cron.hourly下,但没有成功。 - Kishore
1
@Kishore,你有使用“hourly”选项吗?请确保通过阅读操作系统上的man页面man logrotate来验证该选项是否受支持。 - f0ster
21
难道你不希望移动logrotate而不是复制吗?否则就会有一段时间logrotate两次同时运行。 - mulllhausen
14
我发现在将"logrotate"移动到"/etc/cron.hourly"后,需要重新启动"crond"服务。例如,在CentOS 7中,可以使用命令"sudo systemctl restart crond"来重新启动。 - cherdt
5
@mulllhausen logrotate 默认会锁定状态文件,如果锁已被占用,则会退出 - 因此,即使在相同的时间运行,也不会存在在 cron.hourlycron.daily 计划中同时运行的问题。 - rvalue
嗨,我正在使用CentOS,即使添加了cron.hourly,我仍然看不到它起作用。 - Pankaj Rathi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接