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


23

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

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

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

但是是否有一种更优雅的解决方案,可以按小时轮换日志?


当然。您的操作系统是什么版本?
Nils 2012年

ubuntu 10.04和11
cwd 2012年

Answers:


20

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

其他人有一个目录/etc/cron.d/。在那里,您可以将cron-jobs作为具有特殊crontab条目的cron-settings的任何特殊用户执行(并且必须指定用户名)。

如果使用这些脚本中的任何一个代替标准的日志轮转脚本,/etc/cron.daily/则应在该脚本中复制该脚本并将cp /dev/null其复制到原始位置。否则,将通过logrotate补丁更新将其重新激活。

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

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


5

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

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

我对此一无所知,而且我已经使用Ubuntu多年了。谢谢。:)
Vaughany17年

2

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

crontab -e

将以下行添加到crontab列表中

0 * * * * /usr/sbin/logrotate /etc/logrotate.d/my-hourly-file
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.