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

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

 # clean_logs.sh
#!/bin/bash # ==========================================
# 功能:清理/var/log/路径下的messages历史日志文件(messages-date),但不清理messages文件本身
# 方法:配合crontab作为定时任务每天执行
# 返回:无
# 警告:禁止直接删除/var/log/messages文件
# 日期:2018-04-23
# By:HackHan
# 其他:无
# ========================================== # 创建保存历史日志清除记录的文件/opt/cleanlogs/clean_log.log
createLogFile()
{
targetDir=$1
targetFile=$2 if [ ! -d $targetDir ];then
mkdir -p $targetDir
fi if [ ! -f $targetFile ];then
touch $targetFile
fi
} # 将信息写入日志文件中
logToFile()
{
msg=$1
targetFile=$2
echo $msg >> $targetFile
} # 获取根目录磁盘使用率和剩余可用空间大小,以数组形式返回
getRootDirUsageRate()
{
usagepcent=`df / -h | awk '$6=="/"{sub("%","",$5);print $5}'`
availDisk=`df / -h | awk '$6=="/"{print $4}'`
array=($usagepcent $availDisk)
echo ${array[*]}
} # 根据输入的实际磁盘使用率、实际可用大小、使用率阈值、预期可用磁盘空间阈值判断是否符合要求
# 返回1表示符合要求,返回0表示不符合要求
isDiskUsageOK()
{
# 实际使用率,去掉%后的数字
usagepcent=$1
# 实际可用磁盘空间,单位可能是K/M/G
availDisk=$2
# 使用率阈值,去掉%后的数字
threshHoldPcent=$3
# 可用磁盘空间阈值,无单位(表示G)
threshHoldAvailDisk=$4 if [ ${availDisk:0-1} = "g" -o ${availDisk:0-1} = "G" ]
then
availDiskNoUnit=`echo $availDisk|awk '{sub(/.$/,"")}1'` if [ `echo "$usagepcent > $threshHoldPcent" | bc` -eq 1 ] || [ `echo "$availDiskNoUnit < $threshHoldAvailDisk" | bc` -eq 1 ]
then
echo ""
else
echo ""
fi else
echo ""
fi } # 生成的日志目录
targetDir="/opt/cleanlogs/"
# 生成的日志文件
targetFile="${targetDir}clean_log.log"
# 待删除文件所在路径
targetLogDir="/opt/shell/logs/"
# targetLogDir="/var/log/" # 可用磁盘空间阈值,单位默认为G
availDiskThresh=10
# 磁盘使用率,单位默认为%
diskUsagePcent=90 createLogFile $targetDir $targetFile result=(`getRootDirUsageRate`) beginCleanTime=`date '+%Y-%m-%d %H:%M:%S'` logToFile "===========================================" $targetFile
logToFile "[***] Scanning time : ${beginCleanTime}" $targetFile
logToFile "/ Disk info: Avail:${result[1]} Use%:${result[0]}%" $targetFile
logToFile "-------------------------------------------" $targetFile isOK=`isDiskUsageOK ${result[0]} ${result[1]} $diskUsagePcent $availDiskThresh` if [ $isOK = "" ]
then logToFile "[+] Starting to clean logs ..." $targetFile for item in `ls ${targetLogDir}messages-*`;do
#rm -f $item
echo $item
logToFile $item $targetFile
done logToFile "[-] Ended cleaning logs !" $targetFile
fi endCleanTime=`date '+%Y-%m-%d %H:%M:%S'` logToFile "[***] Ended time: ${endCleanTime}" $targetFile logToFile "===========================================" $targetFile
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

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

  1. 日志文件删除shell脚本

    大日志文件切割shell脚本 #!/bin/bash # --------------------------------------------------------------------- # ...

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

    上一篇是个简单的能够运行而且写入日志的脚本,可是假设放到生产环境上就显得太粗糙了,所以须要进一步的优化: #! /bin/bash if [ -d "/opt/bmc" ] ; t ...

  3. 清除tomcat日志文件的shell脚本

    #! /bin/bash d=`date +%F` exec >> /mydata/script/logs/$d>& echo "开始执行清除tomcat日志文件& ...

  4. shell实战之日志脱敏

    本次实战目标为日志脱敏,将日志目录内的所有文件进行处理,凡是涉及到卡号和密码的信息,一律以“*”号替代,要替代的内容都从对应的标签内获取,本脚本执行目录 drwxr-xr-x 5 root root ...

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

    本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.htm ...

  6. Shell: 定期存档日志文件

    简介 对于日志的分割删除我们一般会使用logratate,但对于项目较多的情况下,会让开发直接将日志分割写在代码里面,对于分割后过期的日志定期删除就很有必要,不然膨胀的日志会占满你的磁盘,将多余的日志 ...

  7. MS SQL 需要定期清理日志文件

    前言碎语 关于对SQL SERVER 日志文件管理方面了解不多的话,可以参考我的这篇博客文章“MS SQL 日志记录管理”,不过这篇文章只是介绍对SQL SERVER日志记录的深入认知了解,并没有提出 ...

  8. 093实战 Nginx日志切割,以及脚本上传nginx的切割日志

    一:日志切割步骤 命令都在root下进行 1.创建目录 mkdir -p /etc/opt/modules/bin ## 创建文件夹 2.上传cut 3.观察目录 4.修改的cut文件 5.检测 需要 ...

  9. shell实战之日志脱敏-2.0

    cfg # This is generated to be a configuration file. # kay # // # This is a parameter for crontab and ...

随机推荐

  1. 洛谷4556 [Vani有约会]雨天的尾巴

    原题链接 每个点开一个权值线段树,然后用树上差分的方法修改,最后自底向上暴力线段树合并即可. 不过空间较大,会\(MLE\),写个内存池就可以了. #include<cstdio> #in ...

  2. Some Websites To Learning Laravel

    https://learninglaravel.net/ https://learnku.com/laravel

  3. CPU与IRP的一些相关函数

    VOID KiAdjustIrpCredits ( VOID )其中 Number = KeNumberProcessors;Prcb = KiProcessorBlock[Index]; 多核情况下 ...

  4. ABP 权限拦截 第二篇

    由于访问人数过多,我今天从新整理一下ABP权限认证机制,帮助大家更容易读懂 1.Abp 的权限拦截主要通过过滤器,    public class AbpAuthorizationFilter : I ...

  5. 【转】机器学习在B2B的应用

    原文地址:http://www.mbtmag.com/blog/2017/04/artificial-intelligence-making-it-work-industrial-companies? ...

  6. Python11/12--GIL/互斥锁/进程池

    GIL1.全局解释器锁? 锁就是线程里面那个锁 锁是为了避免资源竞争造成数据的错乱 2.python程序的执行过程? 1.启动解释器进程 python.exe 2.解析你的py文件并执行它 每个py程 ...

  7. web服务器原理(作业四)

      Web服务器简介:Web服务器是指驻留于因特网上某种类型计算机的程序.当web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该 ...

  8. Django的一些隐性经验

    隐性经验 前后信息的沟通 url中的参数 get获取 这个参数可以写在URL当中(可以写多个,写在这里的get函数需要有相应的参数去获取).,也可以在模版中添加(通过?若是直接写则表示在当前的URL中 ...

  9. two sum --无脑法

    public class Solution { /* * @param numbers: An array of Integer * @param target: target = numbers[i ...

  10. 背水一战 Windows 10 (68) - 控件(控件基类): UIElement - Pointer 相关事件, Tap 相关事件, Key 相关事件, Focus 相关事件

    [源码下载] 背水一战 Windows 10 (68) - 控件(控件基类): UIElement - Pointer 相关事件, Tap 相关事件, Key 相关事件, Focus 相关事件 作者: ...