功能描述:清理/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. mysql的innodb和myisam的区别和应用场景

    1. 区别: (1)事务处理: MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理): (2)锁机制不同: MyISAM是表级锁,而InnoDB是行级锁: (3)sel ...

  2. mysql 地理位置定位

    SET @pt2 = ST_GeomFromText('POINT(116.405289 39.904987)'); SELECT *,ST_Distance_Sphere(ST_GeomFromTe ...

  3. ABP框架系列之四十七:(SignalR-Integration-SignalR-集成)

    Introduction Abp.Web.SignalR nuget package makes it easily to use SignalR in ASP.NET Boilerplate bas ...

  4. fortran77读写文本文档

    PROGRAM WRITETEXT IMPLICIT NONE INTEGER,PARAMETER :: NE=!fortran90 语法定义变量 DOUBLE PRECISION A(,),B(,) ...

  5. 03-jQuery动画效果

    Query提供的一组网页中常见的动画效果,这些动画是标准的.有规律的效果:同时还提供给我们了自定义动画的功能. 显示动画 方式一: $("div").show(); 解释:无参数, ...

  6. 基于UML的毕业选题系统建模研究

    一.基本信息 标题:基于UML的毕业选题系统建模研究 时间:2018 出版源:电脑迷 领域分类:UML建模技术 二.研究背景 问题定义:为了加强学生设计分析开发软件的相关能力,有效避免结构化模型存在的 ...

  7. 8.AOP全自动

    CGLIB字节码增强 l没有接口,只有实现类. 采用字节码增强框架 cglib,在运行时 创建目标类的子类,从而对目标类进行增强. 导入jar包: 自己导包(了解): 核心:hibernate-dis ...

  8. confluence与jira账号对接、查看到期时间及问题总结

    前面介绍了对于confluence和jira的破解版安装记录,下面简单记录下confluence和jira结合配置:安装顺序:先安装Jira,然后安装Confluence,在Confluence安装过 ...

  9. 改善Python 程序的 91 个建议

    建议1.理解Pythonic概念—-详见Python中的<Python之禅> 建议2.编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕过长 ...

  10. Scala微服务架构 一

    因为公司的一个项目需求变动会非常频繁,同时改动在可控范围内,加上产品同学喜欢一些超前思维,我们的CTO决定提前开启八门,使用微服务架构. 划重点 微服务架构主要特点: ==独立组件(自主开发升级)== ...