logrotate: 管理日志文件

时间:2021-04-05 12:45:30

Erik Troan提供了一种优秀的工具logrotate,它实现了多种多样的日志管理策略,而且在我们举例的所有发行版本上都是标准应用。

logrotate的配置文件由一系列规范组成,它们说明了要管理的日志文件组。出现在日志文件规范之外的选项(诸如下面例子中的errors、rotate和weekly)适用于后面所有的规范,它们可以在特定日志文件的规范内被覆盖,也可以在文件的后面重新指定,修改默认值。

下面是一个有点儿故意人为的例子,它设定了几种不同的日志文件:

logrotate: 管理日志文件

这一配置每周轮换一次/var/log/messages文件。它保持了这个文件的5个版本,并且在每次重置文件的时候通知syslogd。Samba的日志文件(这样的文件可能有好几个)也每周轮换一次,但不是移到一边后开始一个新的,而是复制以后截短。只有在轮换了所有的日志文件之后,才向守护进程Samba发HUP信号。

表10.2列出了logrotate.conf最有用的选项。

表10.2 logrotate的选项

选 项

含 义

compress

压缩日志文件的所有非当前版本

daily, weekly, monthly

以指定的时间安排来轮换日志文件

delaycompress

压缩除了当前和最近之外的所有其他版本

endscript

标记prerotate或者postrotate脚本结束

errors emailaddr

向指定的emailaddr发送出错通知邮件

missingok

如果日志不存在,不会发出抱怨

notifempty

如果日志为空,则不轮换它

olddir dir

指定要放入dir里的日志文件老版本

postrotate

引入在轮换过日志之后要运行的脚本

prerotate

引入在进行任何改动之前运行的脚本

rotate n

在轮换方案中包括n个版本的日志

sharedscripts

只为整个日志组运行一次的脚本

size=logsize

如果日志文件大于logsize(例如,100K,4M)才轮换

logrotate一般每天由cron运行一次。它的标准配置文件是/etc/logrotate.conf,但是在logrotate的命令行上一次可以出现多个配置文件(或者包含配置文件的目录)。这一特性被我们所举的发行版本充分利用,它们规定/etc/logrotate.d目录是保存logrotate配置文件的标准位置。懂得logrotate的软件包(这种软件有很多)能把执行日志管理指令作为它们安装过程的一部分,这大大地简化了管理工作。

除了logrotate之外,Debian和Ubuntu还提供了一种更简单的程序,它叫做savelog,能够管理单个文件的轮转工作。它比logrotate更直接,不用(或者不需要用)配置文件。有些软件包更愿意使用它们自己的savelog配置,而不用logrotate。