目录
1 背景
Tomcat 在使用 jsvc 以守护进程的方式启动时(daemon.sh ),tomcat自身将会生成另外一个日志文件(catalina-daemon.out),而不是之前的catalina.out,而且catalina-daemon.out日志不会自动切割,会无限增大。
本文就是说明如何定时每天切割日志,将日志文件可以分成多份保存,这样既可以减少单个日志文件的大小,管理起来也比较方便。
本文主要使用系统脚本的方式定时切割日志,适用于任何不会自动切割且会无限增大的文件(不仅限于catalina-daemon.out文件)。
2 正文
2.1 准备条件
服务器:Debian 9
服务:以守护进程运行的tomcat(daemon.sh)
服务根目录:/usr/tomcat-8080
2.2 日志切割脚本
(1)一般系统定时任务的脚本都放在 /etc/cron* 目录下,故可以创建一个脚本文件 /etc/cron.daily/tomcat-8080-log
vim /etc/cron.daily/tomcat-8080-log
#!/bin/bash
# 切割文件的日期 yyyy-MM-dd
thedate=`date --rfc-3339=date`
# 7天前的日志文件日期
predate=`date +%Y-%m-%d --date="-7 day"`
rmfile="/usr/tomcat-8080/logs/catalina-daemon.${predate}.out"
outfile="/usr/tomcat-8080/logs/catalina-daemon.out"
# 删除X天前的日志文件
if [ -f ${rmfile} ];then
rm -f ${rmfile}
fi
# 切割文件,将原来文件copy到对应日期的文件,清空原来文件
if [ -f ${outfile} ];then
cp ${outfile} /usr/tomcat-8080/logs/catalina-daemon.${thedate}.out
echo "" > ${outfile}
fi
exit 0
命令说明:
date --rfc-3339
3339格式是我们常用的格式,也就是date用"-"分隔,time用":"分隔的形式,分为三种取值精度
date --rfc-3339=ns
2019-09-24 15:14:43.351923327+08:00
date --rfc-3339=seconds
2019-09-24 15:21:29+08:00
date --rfc-3339=date
2019-09-24
然后还得将文件 /etc/cron.daily/tomcat-8080-log 设置为可执行
chmod +x /etc/cron.daily/tomcat-8080-log
(2)设置系统定时任务,每天23点59分时进行日志文件切割
vim /etc/crontab
# 在尾部加上此行
59 23 * * * root /etc/cron.daily/tomcat-8080-log
基本格式 :
m h dom mon dow user command
分 时 日 月 周 执行用户 执行的命令
分(m):0~59
时(h):0~23
日(dom):1~31
月(mon):1~12
周(dow):0~6(0表示星期天)
(3)重启定时器,令配置生效
# 重启定时器
/etc/init.d/cron restart
# 启动定时器
/etc/init.d/cron start
# 停止定时器
/etc/init.d/cron stop
# 查看定时器是否在运行
ps -aux|grep cron