1. 安装
CentOS中直接使用yum安装
> yum -y install logrotate
2.运行机制
logrotate的运行依赖 crontab, 安装logrotate后, 自动在 /etc/cron.daily 目录下添加 logrotate 文件
内容如下:
> cat logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
可见, 定时任务是以 /etc/logrotate.conf 为配置文件执行logrotate命令.
3.logrotate配置
查看 /etc/logrotate.conf 配置文件内容.
> cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be also be configured here.
可以看到 配置文件风格和nginx的配置文件类似, 可以在/etc/logrotate.d目录下添加自定义配置文件.
logrotate 从命令行指定的一系列配置文件中读取有关它应该处理的日志文件的所有内容。 每个配置文件都可以设置全局选项(本地定义覆盖全局,后面的定义覆盖前面的)并指定要轮换的日志文件。 一个简单的配置文件如下所示:
compress # 全局配置, 配置日志切割后文件会被压缩
/var/log/messages { # 单个文件的配置, 只对 /var/log/messages 文件生效
rotate 5 # 切割后,保留最近的5次切割结果文件
weekly # 每周运行一次
postrotate # 之日被切割后, 执行以下脚本中命令
/usr/bin/killall -HUP syslogd
endscript
}
"/var/log/httpd/access.log" /var/log/httpd/error.log { # 对access.log 和 error.log两个文件生效
rotate 5
mail www@my.org # 超过5次的文件,不被删除, 而是以邮件格式发送到www@my.org
size 100k # 日志大小超过 100k 时, 进行切割
sharedscripts # sharedscripts 意味着 postrotate 脚本将只运行一次(在旧日志被压缩之后),而不是为每个轮换的日志运行一次
postrotate
/usr/bin/killall -HUP httpd
endscript
}
/var/log/news/* { # /var/log/news 中所有文件配置
monthly
rotate 2
olddir /var/log/news/old # 切割后数据放入指定目录 /var/log/news/old
missingok # 在日志轮循期间,任何错误将被忽略
postrotate
kill -HUP 'cat /var/run/inn.pid'
endscript
nocompress # 转储文件不压缩
}
常用配置参数
- daily :切分周期为每天
- weekly :切分周期为每周
- monthly :切分周期为每月
- dateext : 归档旧版本的日志文件,添加像 YYYYMMDD 这样的每日扩展名.
- dateformat : 指定 dateext 的扩展名格式,
- rotate count :指定日志文件删除之前保留的的次数,count = 0 指没有备份,3 指保留 3 个文件
- missingok:在日志轮循期间,任何错误将被忽略,例如 “文件无法找到” 之类的错误。
- size size:当日志文件到达指定的大小时出发切分,例如 100, 100k, 100m
- compress: 旧版本的日志文件默认使用 gzip(1) 压缩
- nocompress: 不压缩
- create mode owner group : 转储文件,使用指定的文件模式, mode 以八进制指定日志文件的模式(与 chmod相同),owner 指定将拥有日志文件的用户名,group 指定日志文件所属的组
- nocreate: 不建立新的日志文件
- prerotate/endscript: 在切分之前需要执行的命令可以放入这个对,这两个关键字必须单独成行
- postrotate/endscript: 在切分之后指定的命令