怎样写shell脚本,定期执行删除centos5.6中Apache的log系统日志文件. 只保留最近2个?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样写shell脚本,定期执行删除centos5.6中Apache的log系统日志文件. 只保留最近2个?相关的知识,希望对你有一定的参考价值。
我的centos5.6系统Apache的log系统日志文件. 现在设置为每4小时 生成一个文件,路径格式是 /var/log/httpd/error_log.2011101200 想只保留最近2个日志文件.用什么方式?怎样写shell脚本,定期执行删除其余日志文件
参考技术A find /var/log/httpd -type f -cmin +240 | xargs rm -rfshell脚本:定期删除日志文件
服务器中产生的日志有时会占满硬盘空间,因此需要定时对其清除。下面写了个脚本,实现删除上一个月的日志。
1.代码
#!/bin/bash
yy=`date +%Y` #获取年
mm=`date +%m` #获取月,如果是9月,得到的是09;如果是10月得到的是10
#mm=1
#echo $mm
if [ $mm -eq 1 ] #如果是1月份,其前一月是前一年的12月份
then
preYY=$(($yy-1))
preMM=12;
else
preYY=$yy
#preMM=$(($mm-1))
preMM=`expr $mm - 1` #由于有时是09,所以做减法必须要这么写,但是得到的结果却是8
fi
preMM=`printf %02d $preMM` #由于上一步有可能得到一位数,所以需要前面补0,如08
#echo $preYY $preMM
#df -h
#文件系统 容量 已用 可用 已用% 挂载点
#/dev/sda5 46G 25G 19G 58% /
#none 4.0K 0 4.0K 0% /sys/fs/cgroup
#udev 1.9G 4.0K 1.9G 1% /dev
#tmpfs 385M 1.5M 383M 1% /run
#none 5.0M 0 5.0M 0% /run/lock
#none 1.9G 976K 1.9G 1% /run/shm
#none 100M 32K 100M 1% /run/user
#下面这一句,得到第5列第2行中的58%的58
percent=`df -h | awk 'print $5' | head -2 | tail | grep -oP '\\d+'`
echo $percent
if [ $percent -gt 80 ]
then
#echo "大于80%"
rm -rf /home/fan/shell/localhost_access_log.$preYY-$preMM*
fi
解释:
grep -oP
-o:只显示满足正则表达式的部分(-o, –only-matching show only the part of a line matching PATTERN)
-P:PATTERN 是一个 Perl 正则表达式
2.定时执行
比如:每10分钟执行一次
crontab -e
*/10 * * * * sh /path/to/cleanDisk.sh
解释:
前5个*分别表示,分钟 小时(24制) 日 月 年
*/10 * * * *表示每10分钟执行一次
update 20160608
上面的获取前一个月的逻辑写了这么多,其实只需要一行就可以搞定:
date -d "-1 month" "+%Y-%m-%d"
获取前一天,前一年类似:
date -d "-1 day" "+%Y-%m-%d"
date -d "-1 month" "+%Y-%m"
date -d "-1 year" "+%Y"
获取当前时间1小时之前的时间:
以上是关于怎样写shell脚本,定期执行删除centos5.6中Apache的log系统日志文件. 只保留最近2个?的主要内容,如果未能解决你的问题,请参考以下文章
Centos7下crontab+shell脚本定期自动删除文件