tomcat的catalina.out日志60G了?nginx的日志40G?服务器硬盘因为日志太大撑爆硬盘?还要每天手动清除?每天还要手动备份?
试试系统自带的logrotate日志轮转功能,配置简单,稳定可靠,一次配置永久生效,为您排除后患!
描述
来自man手册
logrotate旨在简化生成大量日志文件的系统的管理。它允许自动轮转、压缩、删除和邮寄日志文件的数量。每个日志文件可以每天、每周、每月处理,也可以在其变得太大时处理。
一般情况下,logrotate是基于每天的cron job来执行的,所以对某个log文件的rotae每天执行一次,除非rotate的执行标准是基于log文件大小,并且你logrotate这个命令每天被执行了多次,也就是你自定义了定时任务,让logrotate每x分钟或者每x小时执行一次,再或者你手动执行这个命令添加了-f/–force这个选项。
可以提供任意数量的配置文件。新的配置文件可能会覆盖早期文件中给出的选项,因此日志文件列出的配置顺序很重要。通常,应该使用一个配置文件,其中包含所需的任何其他配置文件。
安装:
默认centos/redhat系统安装自带logrotate。
yum -y install logrotate crontabs
软件包信息说明
[root@zzx ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf # 主配置文件
/etc/logrotate.d # 配置目录
logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,放在/etc/logrotate.d/目录下。
命令使用
logrotate [-?dfv][-s <状态文件>][--usage][配置文件]
参数说明:
-?或–help 在线帮助。
-d或–debug 详细显示指令执行过程,便于排错或了解程序执行的情况。
-f或–force 强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然。
-s<状态文件>或–state=<状态文件> 使用指定的状态文件。
-v或–version 显示指令执行过程。
-usage 显示指令基本用法。
配置文件参数:
rotate 5 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
missingok 如果日志不存在,不产生错误信息
notifempty 如果日志文件为空,不做rotate,这个跟你ifempty互斥
create 644 root root 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
sharedscripts 配合prerotate and postrotate 使用,sharedscripts 开启的话,如果使用了对需要做rotate的log文件使用了通配符,那么’*‘prerotate** and postrotate 的脚本只会执行一次。没有sharedscripts 的话,每个需要log文件做rotate的时候都会执行一遍prerotate and postrotate 的脚本
delaycompress 延迟压缩旧的日志文件,先rotate,不进行压缩,等到下次rotate时,才会压缩上次rotate的文件。这个需要跟compress一起使用,单独使用不生效。
postrotate/endscript rotate之后想要执行的脚本,需要放在postrotate 与 endscript中间,这两个选项要单独成行。
daily 指定rotate周期为每天,还有weekly, monthly。
rotate count 指定rotate日志文件保留的数量,如果没有配置这个参数,就不保留备份,设置1的话,就是保留1个rotate备份,10就是保留10个rotate备份。
size size 当日志文件到达指定的大小时才转储,默认的大小单位是bytes,可以以k,M,G。比如size 10k,10M,10G。
compress 通过gzip压缩然后备份日志。
nocompress 默认值,不做gzip压缩处理。
delaycompress 和compress配合使用,rotate的日志文件到下一次执行logrotate时才进行压缩处理。
copytruncate 把当前日志备份并截断,先拷贝原日志文件再清空,由于拷贝和清空之间有一个时间差,可能会丢失部 分日志数据。
create mode owner group rotate之后,创建新文件的日志文件并指定新文件的属性,比如:create 644 tomcat tomcat
mail address 把rotate的日志文件发送到指定的E-mail。
dateext 使用当期日期作为命名格式,如果指定的rotate大于1,默认rotate之后的文件名是:xx.log.1,xx.log.2, xx.log3,如果配置dateext规则,那么rotate之后的文件名就会以日期结尾:xx.log.2020-04-20,xx.log.2020-04-21, xx.log.2020-04-22
dateformat -%Y%m%d%H.%s 定义文件rotate后的文件名的日期格式,必须配合dateext使用,查了一下资料,目前只支持: %Y %m %d %H %s 这几个个参数(年,月,日,时,秒)
使用方法
这里用tomcat的catalina.out日志分割举例
- 创建日志分割的配置文件
/etc/logrotate.d文件夹下添加自己定义的配置文件,多个服务或多个路径的可以创建多个文件。
[root@zzx ~]# vim /etc/logrotate.d/tomcat
/usr/local/tomcat/logs/catalina.out {
copytruncate
daily
rotate 7
missingok
compress
size 100M
notifempty
dateext
}
- 手动进行测试
#先利用debug模式测试,根据输出的提示查看配置是否生效,是否需要调整
logrotate -v /etc/logrotate.d/tomcat
#强制手动执行轮转,执行后查看是否有新文件生成,如果生成文件证明配置无误
logrotate -f /etc/logrotate.d/tomcat
- 第二天再进行确认执行无误
之后就可以根据需求再进行配置定时任务进行备份等等。
nginx等服务的日志分割配置文件同理,可以根据需要自定义参数。
更多详细信息可以查看man手册。