文章目录

  • 一、logrotate日志工具简介
  • 二、logrotate配置文件详解
  • 三、logrotate日志切割实战
  • 3.1、logrotate配置文件
  • 3.2、logrotate手动测试
  • 3.3、logrotate定时任务
  • 四、logrotate日志切割脚本
  • 总结




一、logrotate日志工具简介

logrotate是一个日志文件管理工具。用来把旧文件轮转、压缩、删除,并且创建新的日志文件。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理,一般都是通过cron计划任务来完成的。
github网址:https://github.com/logrotate/logrotate


二、logrotate配置文件详解

配置参数

说明

compress

通过gzip压缩转出以后的日志

delaycompress

和compress一起使用时,转储的日志文件到下一次转储时才压缩

nocompress

不需要压缩时,用这个参数

copytruncate

用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据

nocopytruncate

备份日志文件但是不截断

create mode owner group

转储文件,使用指定的文件模式创建新的日志文件。轮转时指定创建新文件的属性,如create 0777 nobody nobody

nocreate

不建立新的日志文件

nodelaycompress

覆盖delaycompress选项,转储同时压缩

errors address

专储时的错误信息发送到指定的Email 地址

ifempty

即使是空文件也转储,这个是 logrotate 的缺省选项

notifempty

如果是空文件的话,不转储

nomail

转储时不发送日志文件

olddir directory

转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

noolddir

转储后的日志文件和当前日志文件放在同一个目录下

prerotate/endscript

在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;这两个关键字必须单独成行

postrotate/endscript

在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行

daily

指定转储周期为每天

weekly

指定转储周期为每周

monthly

指定转储周期为每月

rotate count

指定日志文件删除之前转储的个数,0 指没有备份,5 指保留5个备份

size

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

missingok

如果日志丢失,不报错继续滚动下一个日志

sharedscripts

运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本

dateext

使用当期日期作为命名格式

dateformat .%s

.%s 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数

tabootext [+] list 让logrotate

不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~

size(或minsize) log-size

当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).

说明:
当日志文件 >= log-size 的时候就转储。
以下为合法格式:(其他格式的单位大小写没有试过)
size = 5 或 size 5 (>= 5 个字节就转储)
size = 100k 或 size 100k
size = 100M 或 size 100M

三、logrotate日志切割实战

3.1、logrotate配置文件

a、按照日志大小切割

vim /etc/logrotate.d/mpmt-tcp
/data/pkgs/tomcat-service/mpmt-tcp/catalina.out {
    rotate 5
    size +100M
    copytruncate
    compress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d-%s
}

说明:为什么要用定时任务来调用,因为logrotate的最小执行时间为每天执行一次,但是日志不会等到一天才需要切分,里面的size 的定义指的是只有在满足执行机制的前提下,而且日志大小满足切分要求,才会进行切分。

a、按照时间切割

/data/pkgs/tomcat-service/mpmt-tcp/catalina.out {
    daily
    rotate 5
    missingok 
    dateext
    compress
    notifempty
    copytruncate
}

3.2、logrotate手动测试

/sbin/logrotate -f /etc/logrotate.d/mpmt-tcp

3.3、logrotate定时任务

每小时执行一次日志切割
echo "0 */1 * * * /usr/sbin/logrotate -f /etc/logrotate.d/mpmt-tcp" >> /var/spool/cron/root

四、logrotate日志切割脚本

说明:只需要定义日志文件目录,便可一键执行日志切割脚本,并自动添加到定时任务
CSDN下载网址:


总结

更多详细内容请参考:Linux运维实战总结