监控目录文件大小,当超过设置大小时,清空文件

#####################
## 脚本说明:监控目录文件大小,当超过设置大小时,清空文件.
## 容量限制 :请调整 cap  变量中的数值,单位为K
## 监控路径 :请调整 arrlogFile 变量中的值
#####################
#======================定义全局变量 begin===========================
#限制的容量大小单位k,配置100M
cap=102400
#监控路径,多个路径以空格隔开
arrlogFile=("/var/log/mysql" )
hosts=("host1" "host2" )
#======================定义全局变量 end=============================
#循环迭代配置的扫描目录 启动多个线程扫描任务
for ((j=0;j<${#hosts[@]};j++))
do
{
for ((i=0;i<${#arrlogFile[@]};i++)) do
 #迭代当前host
 currentHost=${hosts[$j]}
 #迭代当前目录文件
 currentFile=${arrlogFile[$i]}
 echo $currentHost---$currentFile
 if ssh $currentHost test -e $currentFile; then #判断在当前host上 目录是否存在 如果存在执行操作
 curFileNum=`ssh $currentHost "cd $currentFile;ls -l|wc -l"` 
 #当前的文件夹容量大小
 curcap=`ssh $currentHost "cd $currentFile;du -sk|awk '{print $1}'" | awk '{print $1}'` 
 #平均每个文件大小,如果超过平均大小则清空文件
 echo $curcap
 fileAvg=$((cap/(curFileNum-1)))
 echo 'avg file size--->'$fileAvg
 #暂存遍历的单个文件大小  
 size=0  
 echo fileAvg$fileAvg
 if [[ $curcap -gt $cap ]] ; then  #当监控目录文件大小大于设置的控制文件大小时去处理文件.
      echo '清理开始'
      for file in `ssh $currentHost "cd $currentFile;ls -l|awk '{print $9}'" | awk '{print $9}'`  #列出目录下所有文件
        do  
                if ssh $currentHost test -f $currentFile/$file;  then
                        echo 'current file->'$file 
                        size=`ssh $currentHost "cd $currentFile;du -sk $file | awk '{print $1}'" | awk '{print $1}'`  #查看文件大小
                        if [[ $size -gt $fileAvg ]] ; then  #当文件大小大于控制文件在这个目录的平均文件大小时清理文件
                             ssh $currentHost "cd $currentFile;cat /dev/null > $file" #清空文件
                        fi  
                fi  
     done   
   fi
 fi
 done
} &
done
wait
echo "监控结束"
#直接通过命令 
#chmod 750 monitorLogs.sh
#./monitorLogs.sh
#或sh monitorLogs.sh 
#执行.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值