18.3.1 logrotate 的配置文件
logrotate 主要是针对登录文件来进行轮替的动作,他必须要记载“ 在什么状态下才将登录文件进行轮替”的设置。logrotate 这个程序的参数配置文件在:
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf 才是主要的参数文件,至于 logrotate.d 是一个目录, 该目录里面的所有文件都会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的文件中,如果没有规定到的一些细部设置,则以 /etc/logrotate.conf 这个文件的规定来指定为默认值!
logrotate 的主要功能就是将旧的登录文件移动成旧文件, 并且重新创建一个新的空的文件来记录,他的执行结果有点类似下面的图示:
图18.3.1、登录文件进行 logrotate 的结果
由上面的图示我们可以清楚的知道,当第一次执行完 rotate 之后,原本的 messages 会变成messages.1 而且会制造一个空的 messages 给系统来储存登录文件。而第二次执行之后,则messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的messages 来储存登录文件!那么如果我们仅设置保留三个登录文件而已的话,那么执行第四次时,则 messages.3 这个文件就会被删除,并由后面的较新的保存登录文件所取代!基本的工作就是这样。
下面是logrotate.conf中的默认内容:
由这个文件的设置我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,所以,其实我们可以将所有的数据都给他写入 /etc/logrotate.conf 即可,但是这样一来这个文件就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设置也似乎不太合理。所以,如果独立出来一个目录,那么每个以RPM 打包方式所创建的服务的登录文件轮替设置, 就可以独自成为一个文件,并且放置到/etc/logrotate.d/ 当中即可。
一般来说,这个 /etc/logrotate.conf 是“默认的轮替状态”而已, 我们的各个服务都可以拥有自己的登录文件轮替设置。如果你的系统空间够大,并且担心出错及骇客的问题,那么可以:
将 rotate 4 改成 rotate 9 左右,以保存较多的备份文件。
大部分的登录文件不需要 compress,空间太小就需要compress,尤其是很占硬盘空间的 httpd 更需要 compress 的。
logrotate.conf 的设置语法是:
下面我们再以 /etc/logrotate.d/syslog 这个轮替 rsyslog.service 服务的文件,来看看该如何设置他的 rotate:
在上面的语法当中,我们知道正确的 logrotate 的写法为:
- 文件名:被处理的登录文件绝对路径文件名写在前面,可以使用空白字符分隔多个登录文件;
- 参数:上述文件名进行轮替的参数使用 { } 包括起来;
- 执行脚本:可调用外部指令来进行额外的命令下达,这个设置需与 sharedscripts ....endscript 设置合用才行。至于可用的环境为:
- prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作;
- postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务!
- Prerotate 与 postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序!
那么 /etc/logrotate.d/syslog 内设置的 5 个文件的轮替功能就变成了:
- 该设置只对 /var/log/ 内的 cron, maillog, messages, secure, spooler 有效;
- 登录文件轮替每周一次、保留四个、且轮替下来的登录文件不进行压缩(未更改默认值);
- 轮替完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd
18.3.2 实际测试 logrotate 的动作
上面那个 -f 具有“强制执行”的意思,如果一切的设置都没有问题的话,那么理论上,你的/var/log 这个目录就会起变化。