咱们在运行tomcat的时候,有一个日志文件不会被拆分,会一直累积,直到预警或磁盘占用完毕,致使了文件没法打开、影响性能、没法归档等问题,故咱们这里经过介绍logrotate工具来解决自动日志拆分问题node
1.验证机器是否有logrotate工具,若是没有则须要安装,如centos系统安装方式(因为该工具很早就存在Linux中,目前在不少发行版本都存在,故通常不须要安装,但简化版操做系统可能有作阉割,因此须要确认)linux
#yum install -y logrotatenginx
2.编写执行脚本vim
#vim /etc/logrotate.d/tomcat centos
#输入以下内容,其中/home/admin/tomcat/logs/catalina.out表明具体须要分割的日志文件(若是是多个文件,能够空格分开,文件名中有空格,要用””,如”/home/admin/access.log” /home/dubbo.log)tomcat
/home/admin/tomcat/logs/catalina.out {dom
dailyide
rotate 30工具
dateext性能
dateformat .%Y-%m-%d
notifempty
copytruncate
}
示例section代表按文件大小触发日志自动切分,大小单位除了上面所示的k外,还能够是M或G
#vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/access.log {
copytruncate
rotate 10
start 0
size 2048k
notifempty
missingok
olddir /usr/local/nginx/logs
}
这里介绍一下里面含有的关键参数
create 644 admin admin指定权限
daily #表示天天进行一次拆分,相应的参数还有weekly、monthly
rotate 30 #表示保留最近30个文件,多余的会自动进行删除,可根据本身的状况定制(必定要配置,坑,若是没有配置,默认是0,也就是虽然滚动生成了日志文件,可是很快就删除了,记住必定要配置)
dateformat #日志文件拆分后缀格式
notifempty #若是被拆分的文件是空的,那么久不作拆分处理
copytruncate #把正在输出的日志拷一份出来,再清空原来的日志(另外一个参数为create,该参数表示把日志文件重命名了,建立了一个新文件,可是怎么防止数据不丢失的,是因为原来日志识别方式是经过inode标记的,因此依然仍是往原日志写数据,那么如何重定向到新建的日志文件,此时某些程序提供从新打开日志文件的接口,故能够重定向到新文件,而完成日志文件切换,可是该功能须要你写日志的程序支持,不然不能达到目的)
size=1G # 若日志文件达到1G,则触发切分(不会自动触发,只是在>1G 时,执行拆分的时候才能成功拆分)
olddir /home/work/history # 指定历史日志存放目录
notifempty # 若/home/work/running.log是空文件,则不作切分
missingok # 若/home/work/running.log不存在,不报错
extension .log #后缀扩展
rotate COUNT
轮转COUNT次,也就是最多保留COUNT个轮转备份。
超出的被删除或邮寄。
设置为0,则不保存轮转的老日志。
start COUNT
轮转文件名基于这个数字。
例如,指定0时,原日志文件轮转的备份文件以.0为扩展名,若是指定9,就直接从.9开始跳过0-8
而后再继续向后轮转rotate指定的次数。
配置完成后,能够先验证一下是否有做用,手动拆分命令
#logrotate --force /etc/logrotate.d/tomcat
执行上面的命令后,会执行上面的脚本内容,看看是否是对你的文件进行了拆分,会生成一个当天日期的catalina.out.2016.xx.xx,并会清空catalina.out文件
关于执行时间的问题(什么时间进行文件拆分的?)
咱们能够自定义文件拆分时间,具体配置文件在 /etc/anacrontab文件内,该文件安装软件后,就会有,故无需本身去新加
# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 #这里就是具体的拆分时间,能够根据各自的状况自由设定
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
提示:
必定记得把crond设为开机启动(通常系统默认启动的)
检查是否开机启动
#chkconfig --list
相关原理
1.如何处罚日志工具执行的
Linux有本身的定时任务,命令是crontab,而此时咱们能够在crontab的每日定时任务中找到logrotate的配置文件
[root@tomcat ~]# ll /etc/cron.daily
total 24
-rwxr-xr-x. 1 root root 196 Jul 18 2013 logrotate
这里能够看到在linux本身的每日定时任务中,已经包含了logrotate日志文件
内容为:
[root@tomcat ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
其中很重要的一句是:/usr/sbin/logrotate /etc/logrotate.conf,表示经过日志工具指定日志配置文件,若是咱们修改了配置文件,最好在执行时带上一个 -f,促使他生效
所以触发logrotate日志工具执行实际上是依赖于linux的定时任务