logrotate 配置参数
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 转储时不发送日志文件 olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir 转储后的日志文件和当前日志文件放在同一个目录下 prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行 postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行 daily 指定转储周期为每天 weekly 指定转储周期为每周 monthly 指定转储周期为每月 rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ size size 当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)
坑点
本人亲测
坑一:
logrotate 使用系统cron运行 默认是每天运行一次
所以你设置各种参数,有可能还是不运行的,比如每小时检测日志大小切割,除非你添加每小时运行的计划任务
脚本路径
/etc/cron.daily/logrotate
解析
#!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf ##运行日志轮转命令 EXITVALUE=$? ##这段是监测轮转是否正常完成,不正常写入系统日志 if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
坑二:
logrotate的三种size方式
请时刻记住不设置计划任务的话 默认每天执行一次日志轮转命令
minsizi 两个条件都满足 ,大小到了,并且执行了日志切割命令 (周期内执行0、1次) maxsizi 任一条件 (周期内执行1、n次) sizi 大小到了就执行 ,但是要设置每分钟执行日志切割命令(设置后,周期参数自动失效)(无周期概念)
坑三:
logrotate的轮转周期
会影响轮转命令的执行,
不添加 sizi参数时,为执行命令的最小周期
添加后,根据具体sizi参数变化
坑四
logrotate的dateformat参数
只支持 %Y %m %d %H %s 这五种时间格式 dateformat -%Y%m%d%H.%s 效果 2021072214.1626933601
坑五
切割后继续往旧日志里写日志
系统日志相关
添加这3个参数 sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript
总结 :个人认为有点鸡肋的功能,你设置了其中的参数,但他不一定生效
不如个人写个shell脚本去检测,清理,一系列操作 添加个计划任务,但是没办法,系统自带的 肯定也是最稳定的,还是人太菜,可能没玩明白吧
示例:
{ compress ##gizp 压缩 delaycompress ##转储后下一次再压缩 rotate 6 ##备份和压缩备份一共6个 create 0600 root root ##创建原文件源属性 copytruncate ##无间断转储 missingok ##忽略错误 dateext ##启用时间格式 dateformat -%Y%m%d%H.%s ##自定义时间格式 sharedscripts ##轮转后的脚本段 (作用为,告知syslogd,使用新文件写入)发现配置后继续写入旧文件时配置该段 postrotate ##轮转后的脚本段 /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript ##轮转后的脚本段 }