logrotate是作为linux系统日志的管理工具存在,它可以轮换,压缩,邮件系统日志文件.

默认的logrotate被加入cron的/etc/cron.daily中作为每日任务执行.

/etc/logrotate.conf为其默认配置文件指定每个日志文件的默认规则.

/etc/logrotate.d/* 为/etc/logrotate.conf默认包含目录其中文件也会被logrotate读取.指明每个日志文件的特定规则.

还在用定时脚本管理日志? 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缺省配置详解


还在用定时脚本管理日志? logrotate来帮你_日志轮转_02

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
}
  1. /etc/nginx/logs/*.log: 这是指定了要进行日志轮转的日志文件的路径. 通配符 *.log 表示匹配所有以 .log 结尾的文件.
  2. create 0640 nginx root: 这是设置新建的日志文件的权限和属主.具体来说,新建的日志文件权限为 0640,属主为 nginx 用户,属组为 root 用户组.
  3. daily: 这是指定日志文件的轮转周期,即每天轮转一次.
  4. rotate 10: 这是指定保留的轮转后的日志文件数量.在这个配置中,最多保留 10 个轮转后的日志文件,超过的部分将被删除.
  5. missingok: 这是设置如果日志文件不存在时不报错.
  6. notifempty: 这是指定如果日志文件为空时不进行轮转.
  7. compress: 这是指定对轮转后的日志文件进行压缩.
  8. sharedscripts: 这是指定在所有日志文件都进行轮转前只运行一次 postrotate 脚本. 这样可以避免在每个日志文件轮转时都执行一次 postrotate 脚本.
  9. postrotate: 这是在轮转后执行的脚本. 在这个配置中, /bin/kill -USR1 \cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true这段命令是发送信号USR1` 给 NGINX 进程, 用来重新打开日志文件以便继续写入日志.
  10. endscript: 这是标记 postrotate 脚本的结束.