【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 ...
随机推荐
- for循环,列表,元组
依旧是python基础 for循环 s = 'woeudbwieb' for i in s:#s代表可迭代对象 print(i) if 'c' not in s: print('没有c') 列表 每个 ...
- 对于PHP面试知识点的小结
基础篇 了解大部分数组处理函数 字符串处理函数(区别 mb_ 系列函数) & 引用,结合案例分析 == 与 === 区别 isset 与 empty 区别 全部魔术函数理解 static.$t ...
- spring源码分析之初始化过程
1.org.springframework.web.context.ContextLoaderListener 一个ServletContextListener,web容器启动监听器 1.1内有成员C ...
- Spring Boot学习笔记:整合H2数据库
H2数据库:java语言编写的嵌入式sql数据库.可以和应用一起打包发布. H2有三种连接模式(Connection Modes): Embedded mode (local connections ...
- C++标准库第二版笔记 2
C++标准库第二版笔记 2 微小但重要的语法提升 template表达式内的空格: vector< list<int> >; // OK in each C++ version ...
- C#Dictionary源码
Dictionary Dictionary与hashtable的区别:dictionary支持泛型. 通常处理哈希冲突的方法有:开放地址法,再哈希法,链地址法,建立一个公共栈区等. 在哈希表上进行查 ...
- ABP框架系列之四十七:(SignalR-Integration-SignalR-集成)
Introduction Abp.Web.SignalR nuget package makes it easily to use SignalR in ASP.NET Boilerplate bas ...
- javascript 取整,取余数 math方法
1.丢弃小数部分,保留整数部分 parseInt() 函数可解析一个字符串,并返回一个整数. parseInt(string, radix) 参数 描述 string 必需.要被解析的字符串. rad ...
- Paper | Residual learning
目录 1. OVERVIEW 2. DEGRADATION 3. SOLUTION(DEEP RESIDUAL LEARNING) 4. IMPLEMENTATION(SHORTCUT CONNECT ...
- jenkins+donet core持续集成环境搭建
一.Jenins+GitHub 参考 另外需要配置Global Tool Configuration 如果没有安装git,需下载安装,下载地址 二.jenkins发布donet core应用 1.配置 ...