【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

原文地址:https://www.cnblogs.com/leejack/p/8927136.html

时间: 2024-10-10 00:49:06

【Shell实战】定期清理日志文件的shell脚本的相关文章

执行系统命令并且将输出写入到日志文件的shell脚本

大概需求是这样的,执行aix系统usysfault命令取故障灯信息,但是这个命令似乎只有root用户才能执行,其他用户执行就报错.想尽了各种办法赋权都以失败告终,所以想到写shell脚本用root用户来执行将结果写入到log文件中,然后我们来读文件取数据就好了,不用执行aix死活都不让我们执行的命令. shell脚本如下: ! /usr/bash while true #循环执行 do { date +"%Y-%m-%d %H:%M:%S" #取当前日期和时间 uname #要执行的命

执行系统命令并且将输出写到指定日志文件的shell脚本(2)

上一篇是个简单的可以执行并且写入日志的脚本,但是如果放到生产环境上就显得太粗糙了,所以需要进一步的优化: #! /bin/bash if [ -d "/opt/bmc" ] ; then if [ -f "/opt/bmc/usysfault.log" ] ; then { date +"%Y-%m-%d %H:%M:%S" /usr/lpp/diagnostics/bin/usysfault #要执行的命令的绝对路径 } > /opt/b

shell实战之日志脱敏

本次实战目标为日志脱敏,将日志目录内的所有文件进行处理,凡是涉及到卡号和密码的信息,一律以“*”号替代,要替代的内容都从对应的标签内获取,本脚本执行目录 drwxr-xr-x 5 root root 4096 May 31 20:20 log -rw-r--r-- 1 root root 57 May 31 20:20 cfg.log -rw-r--r-- 1 root root 3 May 31 20:28 cfg.time -rwxr-xr-x 1 root root 1625 May 31

企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

(转)企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

EXCHANGE 13/16清理IIS LOGS日志文件(含脚本)

EXCHANGE 2013\2016清除IIS LOGS 日志文件. 在完成安装后,即使EXCHANGE不安装在系统盘也会在系统盘下生成IIS日志文件,使用RPC overHTTP或Mapi overHTTP协议,所以都是IIS提供各种服务,这些日志是每次用户连接到exchange时的日志,可以用来诊断连接问题或者安全问题. 默认位置:C:\inetpub\logs\LogFiles(默认C为系统盘的话) 可以在IIS管理器里面更改存储目录为别的盘符,并直接删掉这些目录文件,也可使用脚本进行清理

日志文件报警监控脚本(可用于zabbix监控文件)测试中...

因业务要求,需要对某些日志文件中出现的关键字进行监控,所以写了个脚本用于直接用zabbix调用并返回超出阈值的监控项. 主要用来替代zabbix自带的文件监控项.可以对一台机器上的多个日志文件,多个触发阈值进行监控.不用配置多条zabbix监控项及触发器. 也许将来会逐步增加其他奇怪的监控内容 脚本代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # Author: ColinShi import sys, os import datetim

shell脚本----周期压缩备份日志文件

一.日志文件样式 二.目标 1.备份压缩.log结尾&&时间样式为“date +%Y%m%d”的日志文件(如:20170912.20160311等) 2.可指定压缩范围(N天前至当天):如:今天.昨天(date -d "-1 day" +%Y%m%d)至今天.前天至今天 压缩命名格式为:日期.tar.gz(或:日期.tar.bz2),压缩N天范围内文件后将会生成N个压缩包 3.可指定压缩模式(二选一):tar czf  或  tar cjf 4.可指定删除范围:删除N天

ORACLE清理、截断监听日志文件(listener.log)

在ORACLE数据库中,如果不对监听日志文件(listener.log)进行截断,那么监听日志文件(listener.log)会变得越来越大,想必不少人听说过关于"LISTENER.LOG日志大小不能超过2GB,超过会导致LISTENER监听器无法处理新的连接",当然这个不是真理,不会绝对出现,只是发生在老旧的32bit Linux或Unix系统下面,真实的原因是一些32bit OS自带的文件系统不支持2GB以上的文件,导致监听服务进程(tnslsnr)append write日志文件