logrotate 的配置档

来源:互联网 发布:莫烦python 编辑:程序博客网 时间:2024/05/01 09:15

既然 logrotate 主要是针对登录文件来进行轮替的动作,所以罗,他当然必须要记载『在什么状态下才将登录文件进行轮替』的配置啊!那么 logrotate 这个程序的参数配置档在哪里呢?呵呵!那就是:

  • /etc/logrotate.conf
  • /etc/logrotate.d/

那个 logrotate.conf 才是主要的参数文件,至於 logrotate.d 是一个目录,该目录里面的所有文件都会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在/etc/logrotate.d/ 里面的文件中,如果没有规定到的一些细部配置,则以 /etc/logrotate.conf这个文件的规定来指定为默认值!


底下我们再以 /etc/logrotate.d/syslog 这个轮替 syslog 服务的文件,来看看该如何配置他的 rotate 呢?

[root@www ~]# vi /etc/logrotate.d/syslog/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \/var/log/boot.log /var/log/cron {  sharedscripts  postrotate    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true    /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true  endscript}

在上面的语法当中,我们知道正确的 logrotate 的写法为:

  • 档名:被处理的登录文件绝对路径档名写在前面,可以使用空白字节分隔多个登录文件;
  • 参数:上述档名进行轮替的参数使用 { } 包括起来;
  • 运行脚本:可呼叫外部命令来进行额外的命令下达,这个配置需与 sharedscripts .... endscript 配置合用才行。至於可用的环境为:
    • prerotate:在启动 logrotate 之前进行的命令,例如修改登录文件的属性等动作;
    • postrotate:在做完 logrotate 之后启动的命令,例如重新启动(kill -HUP) 某个服务!
    • Prerotate 与 postrotate 对於已加上特殊属性的文件处理上面,是相当重要的运行程序!

那么 /etc/logrotate.d/syslog 内配置的六个文件的轮替功能就变成了:

  • 该配置只对 /var/log/ 内的 messages, secure, maillog, spooler, boot.log, cron 有效;
  • 登录文件轮替每周一次、保留四个、且轮替下来的登录文件不进行压缩(未更改默认值);
  • 轮替完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd

假设我们有针对 /var/log/messages 这个文件添加 chattr +a 的属性时,依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 将会被更名成为 /var/log/messages.1 才是。但是由於加上这个 +a 的参数啊,所以更名是不可能成功的!那怎么办呢?呵呵!就利用 prerotate 与 postrotate 来进行登录文件轮替前、后所需要作的动作啊!果真如此时,那么你可以这样修改一下这个文件喔!

[root@www ~]# vi /etc/logrotate.d/syslog/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \/var/log/boot.log /var/log/cron {  sharedscripts  prerotate    /usr/bin/chattr -a /var/log/messages  endscript  sharedscripts  postrotate    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true    /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true    /usr/bin/chattr +a /var/log/messages  endscript}

看到否?就是先给他去掉 a 这个属性,让登录文件 /var/log/messages 可以进行轮替的动作,然后运行了轮替之后,再给他加入这个属性!请特别留意的是,那个/bin/kill -HUP ... 的意义,这一行的目的在於将系统的 syslogd重新以其参数档 (syslog.conf) 的数据读入一次!也可以想成是 reload 的意思啦!由於我们创建了一个新的空的纪录档,如果不运行此一行来重新启动服务的话,那么记录的时候将会发生错误呦!(请回到第十七章读一下kill 后面的 signal 的内容说明)


0 0
原创粉丝点击