版权声明:所有文章都是自己原创,谢谢。 https://blog.csdn.net/weixin_42840933/article/details/83993415
一 . 实现功能
- 每天凌晨一点,将tomcat中的catalina.out日志压缩并备份到目标文件夹中,以当天日期为格式,然后清空日志。
- 删除超过15天的备份日志,并将logs中的其他日志文件每7天清空一次(如 localhost.2018-09-21.log等)
二 . 思路
- 用date函数截取当前时间日期
- 将logs中的catalina.out文件用gzip命令打包压缩移动到目标文件夹
- 用find命令清除更改时间为15天以前的压缩包
- 用find命令配合for循环清空7天以前的日志文件
- 用crontab定时命令每天凌晨一点执行一次此shell脚本
三 . 脚本内容
#!/bin/bash
d=`date +%Y-%m-%d`
path1=/usr/local/myshell
path2=/usr/local/tomcat/logs
cd $path2
gzip -c catalina.out>$path1/catalina.$d.gz
cat /dev/null>$path2/catalina.out
find $path1 -mtime +15 -name "*.gz" -exec rm -rf {} \;
for i in `find $path2 -mtime +7 -name "*.log"`
do cat /dev/null>$i
done
for l in `find $path2 -mtime +7 -name "*.txt"`
do cat /dev/null>$l
done
四 . 脚本详解
date +%Y-%m-%d
date命令 显示当前时间
“+
” 加号为设定显示的日期格式
%Y
年%m
月%d
日%H
小时%M
分钟%S
秒gzip -c catalina.out>$path1/catalina.$d.gz
gzip 为压缩命令 压缩后缀为.gz
格式为 gzip -命令 要压缩的文件>
压缩后的路径文件
-c
不改动原始文件cat /dev/null>$path2/catalina.out
/dev/null
是一个黑洞文件 可以用于丢掉数据,任何进入她的数据都会丢失,将她导入任何文件,文件都会变成空白。
用cat
进行查找并输入/dev/null
中的内容进入日志,从而实现清空日志的目的find $path1 -mtime +15 -name "*.gz" -exec rm -rf {} \;
find命令为查找
-mtime
为内容被修改的时间(经常用于find 配合rm删除多少天前创建的文件)
-ctime
为状态发生改变的时间(权限 位置等)
-atime
为最近访问的时间
“+
”为多少天前 “-
”为多少天内
-name
为名字符合name的文件
-exec
将查找到的内容进行后续的操作
{}
代表find查到的结果
;
是代表 -exec后的命令一直到;
结束
\
为转义- for l in
find $path2 -mtime +7 -name "*.txt"
for 循环意味重复查找符合“”
中条件的文件并进行清空文件的操作
五 . crontab定时任务
0 1 * * * /usr/local/myshell/tomcat.sh
crontab -e 可以编辑定时任务
0 1 * * *
这五个符号分别为 分钟 小时 日 月 星期
*为所有时间
所以上面的意思为每天凌晨一点运行一次tomcat.sh