功能描述:清理/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
原文地址:https://www.cnblogs.com/leejack/p/8927136.html
时间: 2024-10-10 00:49:06