debian使用 Logrotate 来切割日志
前言, 之前修改了mysql.cnf, 导致日志转储每天会报错并且增加一条mail数据. 于是修改了下logrotate来避免, 顺便看了下man
1. install && configurate
绝大多数linux都默认安装了logrotate,
配置文件分散了下, 和mysql, apache, nginx之类的程序一样, 采用了主配置文件
/etc/logrotate.conf 以及 子配置文件/etc/logrotate.d/*.conf
同时, logrotate默认是放在了/etc/cron.daily/logrotate来让cron每天执行
2. 配置解析
以/etc/logrotate.conf为例, #为注释
# see "man logrotate" for details
# rotate log files weekly
weekly #weekly为每周处理, 可用daily, monthly,来指定转储周期为每天,每月
# keep 4 weeks worth of backlogs
rotate 4 #指定日志文件删除前转储的次数, 0 没有备份, 4指保留4个备份
# create new (empty) log files after rotating old ones
create #转储文件, 使用指定的文件模式来创建新的日志文件, 比如create 0640 mysql mysql 表明以mysql用户和组来创建权限640的日志文件.
# uncomment this if you want your log files compressed
#compress #是否启用gzip压缩转储以后的日志, 注释后=nocompress, 默认是不压缩
#delaycompress #和compress一起使用, 转储的日志文件到下一次转储才压缩, 也就是如果按照每天转储日志, 要第三天的日志文件才压缩. 这样就方便前一天的日志可以直接被tail, cat而不需要gzip解压.
#compresscmd /bin/tar #配合compress, 指定压缩工具的执行路径
#compressext .gz #配合compress, 指定采用别的日志转储压缩方式的后缀, 比如要用bzip, tar.gz
#size 10k #超过多少k后启用一次转储, 也就是说如果设置的是每天转储, 如果一天有29k, 那么会生成2个转储日志. 并且按照最新的序号最小来命名.
#ifempty #即使是空文件也转储, 默认值, 如果需要忽略空日志文件, 用notifempty
#dateext #增加日志的时间戳, 默认是没有添加的, 加上后在转储日志上加"-YYYMMDD"格式的日期, 不配置则是一个".数字序号"
#dateformat #配合上面使用, 来自定义日志的后缀日期格式, 比如dateformat -%Y%m%d.%s
# packages drop log rotation information into this directory
include /etc/logrotate.d #包含的子配置
# no packages own wtmp, or btmp -- we'll rotate them here
# 下面是一个wtmp的例子,
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
# 下面是一个btmp的例子
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
# system-specific logs may be configured here