newalanhost:[/home/newalan/bin]crontab -l
0 2 * * * /home/newalan/bin/cleanlog.sh
用crontab来定时调这个脚本,以上设置每日的凌晨2点0分执行
newalanhost:[/home/newalan/bin]cat /home/newalan/bin/cleanlog.sh
#!/bin/sh
#find $HOME/log -mtime +3 -type f -exec rm -rf {} ;
rm -rf $HOME/log/.tmpblog/*
#把2天之外的日志del
cd $HOME/log
for i in `ls -lr|grep ^d|awk '{print $9}'|grep ^2[0-9][0-9][0-9][0-9][0-9][0-9][0-9]$|sed '1,2d'`
do
rm -rf $i
done
举例来说
newalanhost:[/home/newalan/log]ls -al
drwxrwxrwx 2 newalan cics 4096 Jun 21 08:56 .tmpblog
drwxrwxrwx 2 newalan cics 4096 Jun 20 15:34 20180620
drwxrwxrwx 2 newalan cics 4096 Jun 21 08:27 20180621
-rw-r--r-- 1 newalan cics 904 Jun 14 13:52 ARECFG.log.14
-rw-r--r-- 1 newalan cics 985822658 Jun 21 08:56 sbl.log
该目录/home/newalan/log是日志目录,不过有一些创建规则
其中红色的以日期命名的目录(20180620、20180621)每天创建一个,记录当天发生的交易的日志
紫色的的目录(.tmpblog)是隐藏目录,记录交易的中间临时信息,只有交易错误时才记录,一般不用看
日志文件夹下的其他蓝色文件(ARECFG.log.14、 sbl.log)有些是公共的操作记录的日志,或者是不规范的日志,本来应该记录在红色的以日期命令的目录里
这三种日志的清理对应脚本中的三种颜色
一般 find $HOME/log -mtime +3 -type f -exec rm -rf {} ; 可以清理大部分日志(语句中设定超过3天前的日志)
不过这个语句对于红色的以日期命令的目录,只会删除目录中的文件,不删除目录,导致会遗留很多内空的日期命名的目录,因此这种方式被废弃了,但如果你的日志目录里
不存在以日期命名的目录,这个命令还是很好用的。
我们代替的方式是用下面的紫色命令和红色命令,紫色很简单,删除隐藏目录(.tmpblog)下的文件,
红色的命令的逻辑是,在该目录下按时间逆序(ls -lr)排列的目录(grep ^d,目录名位于第九列$9)中,搜索日期命名的文件夹,并去掉最新的两个(1,2d),即实现了保留最近的
两天的日志,其他的全部删除。