zoukankan      html  css  js  c++  java
  • 【Shell实战】定期清理日志文件的shell脚本

    功能描述:清理/var/log/路径下的messages历史日志文件(messages-date),但不清理messages文件本身

    依赖要求:服务器上安装了bc模块

      1 # clean_logs.sh
      2 #!/bin/bash
      3 
      4 # ==========================================
      5 # 功能:清理/var/log/路径下的messages历史日志文件(messages-date),但不清理messages文件本身
      6 # 方法:配合crontab作为定时任务每天执行
      7 # 返回:无
      8 # 警告:禁止直接删除/var/log/messages文件
      9 # 日期:2018-04-23
     10 #  By:HackHan
     11 # 其他:无
     12 # ==========================================
     13 
     14 # 创建保存历史日志清除记录的文件/opt/cleanlogs/clean_log.log
     15 createLogFile()
     16 {
     17         targetDir=$1
     18         targetFile=$2
     19 
     20         if [ ! -d $targetDir ];then
     21                 mkdir -p $targetDir
     22         fi
     23 
     24         if [ ! -f $targetFile ];then
     25                 touch $targetFile
     26         fi
     27 }
     28 
     29 # 将信息写入日志文件中
     30 logToFile()
     31 {
     32         msg=$1
     33         targetFile=$2
     34         echo $msg >> $targetFile
     35 }
     36 
     37 # 获取根目录磁盘使用率和剩余可用空间大小,以数组形式返回
     38 getRootDirUsageRate()
     39 {
     40         usagepcent=`df / -h | awk '$6=="/"{sub("%","",$5);print $5}'`
     41         availDisk=`df / -h | awk '$6=="/"{print $4}'`
     42         array=($usagepcent $availDisk)
     43         echo ${array[*]}
     44 }
     45 
     46 # 根据输入的实际磁盘使用率、实际可用大小、使用率阈值、预期可用磁盘空间阈值判断是否符合要求
     47 # 返回1表示符合要求,返回0表示不符合要求
     48 isDiskUsageOK()
     49 {
     50         # 实际使用率,去掉%后的数字
     51         usagepcent=$1
     52         # 实际可用磁盘空间,单位可能是K/M/G
     53         availDisk=$2
     54         # 使用率阈值,去掉%后的数字
     55         threshHoldPcent=$3
     56         # 可用磁盘空间阈值,无单位(表示G)
     57         threshHoldAvailDisk=$4
     58 
     59         if [ ${availDisk:0-1} = "g" -o ${availDisk:0-1} = "G" ]
     60         then
     61                 availDiskNoUnit=`echo $availDisk|awk '{sub(/.$/,"")}1'`
     62 
     63                 if [ `echo "$usagepcent > $threshHoldPcent" | bc` -eq 1 ] || [ `echo "$availDiskNoUnit < $threshHoldAvailDisk" | bc` -eq 1 ]
     64                 then
     65                         echo "0"
     66                 else
     67                         echo "1"
     68                 fi
     69 
     70         else
     71                 echo "0"
     72         fi
     73 
     74 }
     75 
     76 # 生成的日志目录
     77 targetDir="/opt/cleanlogs/"
     78 # 生成的日志文件
     79 targetFile="${targetDir}clean_log.log"
     80 # 待删除文件所在路径
     81 targetLogDir="/opt/shell/logs/"
     82 # targetLogDir="/var/log/"
     83 
     84 # 可用磁盘空间阈值,单位默认为G
     85 availDiskThresh=10
     86 # 磁盘使用率,单位默认为%
     87 diskUsagePcent=90
     88 
     89 
     90 createLogFile $targetDir $targetFile
     91 
     92 result=(`getRootDirUsageRate`)
     93 
     94 beginCleanTime=`date '+%Y-%m-%d %H:%M:%S'`
     95 
     96 logToFile "===========================================" $targetFile
     97 logToFile "[***] Scanning time : ${beginCleanTime}" $targetFile
     98 logToFile "/ Disk info: Avail:${result[1]}      Use%:${result[0]}%" $targetFile
     99 logToFile "-------------------------------------------" $targetFile
    100 
    101 
    102 
    103 isOK=`isDiskUsageOK ${result[0]} ${result[1]} $diskUsagePcent $availDiskThresh`
    104 
    105 if [ $isOK = "0" ]
    106 then
    107 
    108         logToFile "[+] Starting to clean logs ..." $targetFile
    109 
    110         for item in `ls ${targetLogDir}messages-*`;do
    111                 #rm -f $item
    112                 echo $item
    113                 logToFile $item $targetFile
    114         done
    115 
    116         logToFile "[-] Ended cleaning logs !" $targetFile
    117 fi
    118 
    119 endCleanTime=`date '+%Y-%m-%d %H:%M:%S'`
    120 
    121 logToFile "[***] Ended time: ${endCleanTime}" $targetFile
    122 
    123 logToFile "===========================================" $targetFile
    124 logToFile "" $targetFile

    要实现定时执行,需要创建crontab计划。例如,我们想每隔1个小时执行该日志清除程序,假设该可执行文件存放路径为/opt/shellutils/clean_logs.sh,那么创建crontab如下:

    # crontab -e
    * */1 * * * /opt/shellutils/clean_logs.sh >> /opt/cleanlogs/clean_log.log 2>&1
  • 相关阅读:
    viewmodel
    jQuery.each的function中有哪些参数
    JS,Jquery获取各种屏幕的宽度和高度
    解决点击空<a>标签返回页面顶部的问题
    JS使用getComputedStyle()方法获取CSS属性值
    html5中画布和SVG的比较
    HTML中的SVG
    Canvas绘制时钟
    用Canvas实现动画效果
    绘制文字
  • 原文地址:https://www.cnblogs.com/leejack/p/8927136.html
Copyright © 2011-2022 走看看