Logrotate日志切割

小知识 12-30 09:11
Tomcat的catalina.out日志文件会随着时间的增长变的越来大,会影响程序运行,如果不处理最终会导致磁盘空间被占满,程序无法运行。在我们运行的正式环境里,1天增加近2G,很是影响日志查询。
 
清空日志文件可使用命令:echo -n  " " > catalina.out

logrotate日志切分工具

ogrotate 是一个 Bash 的 SHELL 脚本,可对日志文件进行切分,并将切分后的日志放在统一目录。实用程序旨在简化在生成大量日志文件的系统上对日志文件的管理。允许自动循环压缩,删除和邮寄日志文件。可以将logrotate设置为每小时、每天、每周、每月或当日志文件达到一定大小时处理日志文件。

Logrotate运行机制

系统会定时运行logrotate,一般是每天一次。系统是这么实现按天执行的。crontab会每天定时执行/etc/cron.daily目录下的脚本,而这个目录下有个文件叫logrotate。

Logrotate的组成

/usr/sbin/logrotate         #程序所在位置;
/etc/cron.daily/logrotate    #默认让Cron每天执行logrotate一次;
/etc/logrotate.conf         #全局配置文件;
/etc/logrotate.d/           #应用自个的配置文件存放目录,覆盖全局配置;
注意:logrotate.d 是一个目录,该目录里的所有文件都会被主动的读入/etc/logrotate.conf中执行。另外,如果/etc/logrotate.d/里面的文件中没有设定一些细节,则会以/etc/logrotate.conf这个文件的设定来作为默认值。

Logrotate的命令格式

logrotate [OPTION...] <configfile>
-d, --debug :debug模式,测试配置文件是否有错误。
-f, --force :强制转储文件。
-m, --mail=command :压缩日志后,发送日志到指定邮箱。
-s, --state=statefile :使用指定的状态文件。
-v, --verbose :显示转储过程。
例如:想强行切割日志文件,不等logrotate切割。
[root@test01 ~]# /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat  #我是用来测试用的
 
注意:CentOS7 命令是在/usr/sbin/里。

Logrotate实例

新建tomcatrotate文件,放到 /etc/logrotate.d/ 目录里面,下面的内容如下
 
/data/logs/catalina.out { # 要切割的日志路径,如果是多个就用空格分隔
su root root   # 使用root权限
daily          # 每天切割
# 轮替最多保留之前的数据90次
rotate 90
missingok      # 如果日志丢失,不报错继续滚动下一个日志
dateext        # 使用当期日期作为命名格式
compress       # 启用压缩,指的是轮替后的旧日志,这里默认用的是gzip压缩的
notifempty     # 如果日志是空的就不轮替(也就是空日志不切割)
copytruncate   # 用于还在打开中的日志文件,把当前日志备份并截断,是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
    # 轮替后日志文件放入指定的目录  
olddir /data/logs
}

Logrotate指令在线测试

/usr/sbin/logrotate -vf /etc/logrotate.d/tomcatrotate
 
Logrotate是程序自动完成的,不需要我们干预。当然了,我们也可以使用手工的方式进行logrotate程序。在命令行进行如下运行:
 
logrotate /etc/logrotate.conf
 
或者只轮转刚刚的tomcat配置文件,可以这样运行:
 
logrotate --force /etc/logrotate.d/tomcat