linux logrotate 配置及测试

来源:互联网 发布:江西广电网络客服电话 编辑:程序博客网 时间:2024/05/16 06:41
一、logrotate 配置

logrotate 
程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做转储。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
logrotate 
程序还可以用于压缩日志文件,以及发送日志到指定的E-mail 

logrotate 
的配置文件是 /etc/logrotate.conf。主要参数如下表:

参数 功能
compress 
通过gzip 压缩转储以后的日志
nocompress 
不需要压缩时,用这个参数
copytruncate 
用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 
备份日志文件但是不截断
create mode owner group 
转储文件,使用指定的文件模式创建新的日志文件
nocreate 
不建立新的日志文件
delaycompress 
 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 
覆盖 delaycompress 选项,转储同时压缩。
errors address 
专储时的错误信息发送到指定的Email 地址
ifempty 
即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 
如果是空文件的话,不转储
mail address 
把转储的日志文件发送到指定的E-mail 地址
nomail 
转储时不发送日志文件
olddir directory 
转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 
转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 
在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 
在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 
指定转储周期为每天
weekly 
指定转储周期为每周
monthly 
指定转储周期为每月
rotate count 
指定日志文件删除之前转储的次数,指没有备份,指保留个备份
tabootext [+] list 
logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v,  ~

size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及K (sizek)或者M (sizem).

二、缺省配置 logrotate

logrotate 
缺省的配置募/etc/logrotate.conf
Red Hat linux 
缺省安装的文件内容是:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# send errors to root
errors root
# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp --we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

/var/log/lastlog {
monthly
rotate 1
}

# system-specific logs may be configured here


缺省的配置一般放在logrotate.conf 文件的最开始处,影响整个系统。在本例中就是前面12行。

第三行weekly 指定所有的日志文件每周转储一次。
第五行 rotate 4 指定转储文件的保留 4份。
第七行 errors root 指定错误信息发送给root
第九行create 指定 logrotate 自动建立新的日志文件,新的日志文件具有和
原来的文件一样的权限。
11 #compress 指定不压缩转储文件,如果需要压缩,去掉注释就可以了。

三、使用include 选项读取其他配置文件
include 
选项允许系统管理员把分散到几个文件的转储信息,集中到一个
主要的配置文件。当 logrotate logrotate.conf 读到include 选项时,会从指定文件读入配置信息,就好像他们已经在/etc/logrotate.conf 中一样。

13 include /etc/logrotate.d 告诉 logrotate 读入存放在/etc/logrotate.d 目录中的日志转储参数,当系统中安装了RPM 软件包时,使用include 选项十分有用。RPM 软件包的日志转储参数一般存放在/etc/logrotate.d目录。

include 
选项十分重要,一些应用把日志转储参数存放在 /etc/logrotate.d ,/etc/logrotate.d/里的每个文件配置会覆盖或追加该文件默认的参数,如果未指定参数,则采用logrotate.conf中默认的参数,比如logrotate.conf中,rotate默认为4, test(四章中的例子)文件指定rotate为50,将覆盖rotate配置,

典型的应用有:apache, linuxconf, samba, cron 以及syslog, squid

这样,系统管理员只要管理一个 /etc/logrotate.conf 文件就可以了。
logrotate 也可以直接执行 后直接跟配置文件就可以了。
-v 给出详细信息
-d debug模式,不更改日志文件内容 模拟执行
-f 强制执行,忽略所有规则

四、测试例子

例1:在/etc/logrotate.d/目录下,touch test,打开test文件输入以下:

[cpp] view plaincopy
  1. <span style="font-size:24px;">/tmp/test.log{  
  2.     missingok  
  3.     create 0640 root root  
  4.     rotate 50  
  5.     size=1k  
  6. }</span>  

在/tmp/目录下touch test.log文件

执行命令: dd if=/dev/zero of=test.log bs=1024 count=1000

之后文件大小为1000K。

执行命令: logrotate -v /etc/logrotate.conf

ls -lrt查看/tmp目录多了一个test.log.1,大小是1000K

得出结论:

1.logrotate能设置文件大小,当超过这个大小时,是转储成另一个文件,而不是按size大小转储多个文件。

2.logrotate本身并不能时时监控文件大小,logrotate一般是在/etc/cron.daily中一天执行一次,所以当test.log超过配置的size大小时,并不能主动触发logrotate命令,这将造成logrotate滞后,当然,可以在crontab里1分钟执行一次,不过这样的话,整个日志系统效率会比较低。我们可以写个脚本一秒执行一次检测test.log文件大小。如下:

[cpp] view plaincopy
  1. <span style="font-size:24px;">#!/bin/bash  
  2. a="/tmp/test.log"  
  3. while [[ -f $a ]];  
  4. do  
  5. sleep 1;  
  6. size=`ls -lrt $a | cut -d " " -f 5`  
  7. echo $size  
  8. if [ $size -ge 1024 ];  
  9. then  
  10. logrotate  /etc/logrotate.conf;  
  11. fi  
  12. done</span>  

例2:和例1一样,也是test.log,不过,在/etc/logrotate.d/test里改动如下:

[cpp] view plaincopy
  1. <span style="font-size:24px;">/tmp/test.log{  
  2.     missingok  
  3.     create 0640 root root  
  4.     rotate 50  
  5.     size=1k  
  6.     prerotate  
  7.     chattr -a /tmp/test.log  
  8.     endscript  
  9.     postrotate  
  10.     chattr +a /tmp/test.log  
  11.     endscript  
  12. }</span>  

chattr +a属性是把该文件变成只能追加模式,不能截断和覆盖,也不能重命名,所以logrotate之前,需要chattr -a,logrotate之后再chattr +a加上该属性(见test文件)

执行:dd if=/dev/zero of=/tmp/111 bs=1025 count=1 生成1025字节的111文件

执行:cat /tmp/111 >> /tmp/test.log

执行:logrotate -vf /etc/logrotate.conf

test.log成功转储到test.log.1







来源:http://blog.csdn.net/hepeng597/article/details/7768615

0 0