logrotate是作为linux系统日志的管理工具存在,它可以轮换,压缩,邮件系统日志文件.
默认的logrotate被加入cron的/etc/cron.daily中作为每日任务执行.
/etc/logrotate.conf为其默认配置文件指定每个日志文件的默认规则.
/etc/logrotate.d/* 为/etc/logrotate.conf默认包含目录其中文件也会被logrotate读取.指明每个日志文件的特定规则.
日志文件的管理:
1,logrotate配置
2,缺省配置logrotate
3,使用include选项读取其他配置文件
4,举例使用定时脚本切割nginx日志
5,使用logrotate为nginx日志配置转储参数
logrotate简介
logrotate程序是一个日志文件管理工具.用来把旧的文件删除,并创建新的日志文件,我们把它叫做"转储".我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过cron程序来执行.
logrotate程序还可以用于压缩日志文件,以及发送日志到指定的E-mail.
logrotate 配置
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 转储时不发送日志文件到mail
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份, 5指保留5个备份
tabaootext[+] list让logrotate不转储指定扩展名的文件,缺省的扩展名是: .rpm-orig, .rpmsave, v,和~
size size 当日志文件达到指定的文件大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem).
logrotate缺省配置详解
1,weekly: 指定日志文件每周轮转一次
2,rotate 4: 保留4个轮转周期的旧日志文件,超过4个的将被删除.
3,create: 每次轮转后都会创建一个新的空日志文件.
4,dateext: 在轮转后的日志文件名中添加日期后缀.
5,#compress 指定不压缩转储文件,如果需要压缩,去掉注释掉就可以了.
6,include /etc/logrotate.d 包含其他日志轮转配置文件的目录
使用定时脚本切割nginx日志
NGINX_DIR=/usr/local/nginx/
BACKUP_DIR=/data/backup/nginx/
YESTERDAY=`date -d 'yesterday' +%Y-%m-%d`
BACKUP_DATE_DIR=${BACKUP_DIR}${YESTERDAY}/
PIDFILE=/usr/local/nginx/logs/nginx.pid
cut_logs(){
# 检查nginx主目录是否存在,如果不存在需要检查nginx服务和nginx主目录
[[ ! -d ${NGINX_DIR} ]] && echo -e "nginx主目录不存在,请检查" && exit 111
[[ ! -d ${BACKUP_DATE_DIR} ]] && mkdir -p ${BACKUP_DATE_DIR}
echo -e "\n开始备份...\n"
mv ${NGINX_DIR}logs/*.log ${BACKUP_DATE_DIR}
# 压缩
gzip ${BACKUP_DATE_DIR}*.log
echo -e "\n备份完成\n"
echo -e "\n重载nginx配置中...\n"
kill -USR1 `cat ${PIDFILE}` || echo -e "重载nginx配置失败"
echo -e "\n重载完成\n"
}
cut_logs
使用logrotate为nginx日志配置转储参数
cat /etc/logrotate.d/nginx
/etc/nginx/logs/*.log {
create 0640 nginx root
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
/etc/nginx/logs/*.log
: 这是指定了要进行日志轮转的日志文件的路径. 通配符*.log
表示匹配所有以.log
结尾的文件.create 0640 nginx root
: 这是设置新建的日志文件的权限和属主.具体来说,新建的日志文件权限为0640,
属主为nginx
用户,属组为root
用户组.daily
: 这是指定日志文件的轮转周期,即每天轮转一次.rotate 10
: 这是指定保留的轮转后的日志文件数量.在这个配置中,最多保留 10 个轮转后的日志文件,超过的部分将被删除.missingok
: 这是设置如果日志文件不存在时不报错.notifempty
: 这是指定如果日志文件为空时不进行轮转.compress
: 这是指定对轮转后的日志文件进行压缩.sharedscripts
: 这是指定在所有日志文件都进行轮转前只运行一次postrotate
脚本. 这样可以避免在每个日志文件轮转时都执行一次postrotate
脚本.postrotate
: 这是在轮转后执行的脚本. 在这个配置中,/bin/kill -USR1 \
cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true这段命令是发送信号
USR1` 给 NGINX 进程, 用来重新打开日志文件以便继续写入日志.endscript
: 这是标记postrotate
脚本的结束.