【Shell实战】定期清理日志文件的shell脚本
功能描述:清理/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脚本的更多相关文章
- 日志文件删除shell脚本
大日志文件切割shell脚本 #!/bin/bash # --------------------------------------------------------------------- # ...
- 运行系统命令而且将输出写到指定日志文件的shell脚本(2)
上一篇是个简单的能够运行而且写入日志的脚本,可是假设放到生产环境上就显得太粗糙了,所以须要进一步的优化: #! /bin/bash if [ -d "/opt/bmc" ] ; t ...
- 清除tomcat日志文件的shell脚本
#! /bin/bash d=`date +%F` exec >> /mydata/script/logs/$d>& echo "开始执行清除tomcat日志文件& ...
- shell实战之日志脱敏
本次实战目标为日志脱敏,将日志目录内的所有文件进行处理,凡是涉及到卡号和密码的信息,一律以“*”号替代,要替代的内容都从对应的标签内获取,本脚本执行目录 drwxr-xr-x 5 root root ...
- (转)企业Shell实战-MySQL分库分表备份脚本
本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.htm ...
- Shell: 定期存档日志文件
简介 对于日志的分割删除我们一般会使用logratate,但对于项目较多的情况下,会让开发直接将日志分割写在代码里面,对于分割后过期的日志定期删除就很有必要,不然膨胀的日志会占满你的磁盘,将多余的日志 ...
- MS SQL 需要定期清理日志文件
前言碎语 关于对SQL SERVER 日志文件管理方面了解不多的话,可以参考我的这篇博客文章“MS SQL 日志记录管理”,不过这篇文章只是介绍对SQL SERVER日志记录的深入认知了解,并没有提出 ...
- 093实战 Nginx日志切割,以及脚本上传nginx的切割日志
一:日志切割步骤 命令都在root下进行 1.创建目录 mkdir -p /etc/opt/modules/bin ## 创建文件夹 2.上传cut 3.观察目录 4.修改的cut文件 5.检测 需要 ...
- shell实战之日志脱敏-2.0
cfg # This is generated to be a configuration file. # kay # // # This is a parameter for crontab and ...
随机推荐
- 【转】《深入理解C# 3.x的新特性》博文系列汇总
[转]<深入理解C# 3.x的新特性>博文系列汇总 较之C# 2.0, C# 3.x引入了一系列新的特性,为我们编程带来很大的便利,通过有效地利用这些新特性,我们可以编写出更加简洁.优雅的 ...
- maven解决omitted for duplicate(依赖冲突)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- 图解HTTP第二章
简单的 HTTP 协议 1>HTTP 协议用于客户端和服务器端之间的通信 HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信.请求访问文本或图像等资源的一 ...
- Visual Studio2013 配置opencv3.3.0 x64系统
注:小白一个,第一次写博客,可能会有一些理解上的错误,只此记录自己测试成功的坎坷之路,已备以后查看,同时给有需要之人. 我是win10 64 位,之前安装了visual studio 2013, 现在 ...
- tensorflow学习之(六)使用tensorboard展示神经网络的graph
# 创建神经网络, 使用tensorboard 展示graph import tensorflow as tf import numpy as np import matplotlib.pyplot ...
- Unity3D之物理射线
射线:从一个点往一个方向,发射一根无限长的射线,这根射线会与场景中带有 Collider 组件的物体发生碰撞. 射线的使用: public class Test { private void Star ...
- python:a+=b 和a=a+b? 基础数据类型也不能乱用
python:a+=b 不等于a=a+b? a+=b 调用的是__iadd__方法,但是a+b调用的是__add__方法.对于自定义的对象,我们通过覆盖两个方法来实现+=和+操作,但是基础数据类型呢? ...
- Dockerfile 构建容器
本文是最简单的Dockerfile教程,创建tomcat容器,并跑自己的java程序 首先需要准备几个东西 1.你的java web(test.war) 程序,最好打包成一个 war:(主要是没测试 ...
- dtb和dtc文件浅析
目录 dtb和dtc文件浅析 工具集 dts格式 dtb头部结构 dtb标识符 分析具体的文件 title: dtb和dtc文件浅析 date: 2019/4/25 20:09:38 toc: tru ...
- Flask 中的路由系统
基本用法 Django的路由系统url集中在一起,而Flask的路由系统以装饰器的形式装饰在视图上如: @app.route("/",methods=["GET" ...