代码语言:javascript复制
系统一般每天会定时运行logrotate一次,crontab 会每天定时运行 /etc/cron.daily 目录下的脚本,有个脚本叫 logrotate
/usr/bin/logrotate # logrotate 目录
/etc/cron.daily/logrotate
/etc/logrotate.conf # 全局配置文件
/etc/logrotate.d
安装
代码语言:javascript复制yum install logrotate
配置(示例每天定时切割 tomcat 日志)
代码语言:javascript复制vim /etc/logrotate.d/tomcat
/data/tomcat/logs/catalina.out {
daily # 每天整理一次
copytruncate # 用于还在打开中的日志文件,把当前日志备份并截断
rotate 30 # 保留30天的备份文件,一定要备份,如果不配置默认是0,也就是只允许存在一份日志,刚切出来的日志马上就会被删除
compress # 通过 gzip 压缩转储日志
notifempty # 如果是空文件,不转储
dateext # 文件后缀是日期格式,也就是切割后的文件是xxx.log-20220312.gz
missingok 如果日志不存在则忽略该警告信息
}
# 以下为不常用的参数
weekly # 指定转储周期为每周
monthly # 指定转储周期为每月
nocompress # 不需要压缩时,用这个参数
nocopytruncate # 备份日志文件但是不截断
create mode owner group # 转储文件,使用指定的文件模式创建新的日志文件
nocreate # 不建立新的日志文件
delaycompress 和 compress # 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress # 覆盖 delaycompress 选项,转储同时压缩
errors address # 转储时的错误信息发送到指定的Email 地址
ifempty # 即使是空文件也转储,这个是 logrotate 的缺省选项
mail address # 把转储的日志文件发送到指定的E-mail 地址
nomail # 转储时不发送日志文件
olddir directory # 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir # 转储后的日志文件和当前日志文件放在同一个目录
prerotate/endscript # 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript # 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
测试
代码语言:javascript复制logrotate -d /etc/logrotate.d/tomcat # 调试-d
logrotate -v -f /etc/logrotate.d/tomcat # 强制执行-f