Linux服务器上每天会产生大量的日志文件,占用大量的磁盘空间;因此就有了压缩日志文件的需要,使用shell脚本来完成定时压缩日志文件。
日志目录/var/log/tomcat/需要对该目录下的多个日志文件(文件名格式:xxxx.log.yyyy-mm-dd)进行压缩处理的思路:1. 每个月的一种日志,以月份为单位压缩在同一个文件中,格式如:xxxx.log.2018-04.zip;2. 每天将前一天日志追加到当月的压缩文件中,如果当月压缩日志文件不存在,则创建;3. 加入系统计划任务,定时执行;实现:
#!/bin/bash #日期:年月 zipDate=`date -d yesterday +%Y-%m` #日期:日 zipFileDay=`date -d yesterday +%d` #日志目录 basePath=/var/log/tomcat8/ cd "$basePath" #文件前缀 logkey='aa.log' #循环每种类型的日志 for logkey in aa.log bb.log cc.log dd.log do echo $logkey #是否存在月压缩文件包,不存在就创建一个,并把当前匹配日期的文件压缩; if [ ! -f "${logkey}.${zipDate}.zip" ]; then echo "${logkey}.${zipDate}.zip does not exist."; zip ${logkey}.${zipDate}.zip ${logkey}.${zipDate}-*; rm ${logkey}.${zipDate}-*; else #存在,判断前一天的日志是否存在,存在就将该日志追加到月压缩包中 echo "${logkey}.${zipDate}.zip is exist."; if [ -f "${logkey}.${zipDate}-${zipFileDay}" ]; then echo "${logkey}.${zipDate}-${zipFileDay} is exist."; zip -m ${logkey}.${zipDate}.zip ${logkey}.${zipDate}-${zipFileDay}; # rm ${logkey}.${zipDate}-${zipFileDay}; fi fi done文件名backup.sh,完整路径 /var/www/shell/backup.sh
打开文件
root@iZ253dgk9xaZ:/# crontab -e加入执行任务 (凌晨12点30分执行)
30 0 * * * /var/www/shell/backup.sh保存并退出,查看内容
root@iZ253dgk9xaZ:/# crontab -eOK,结束
