【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 ...
随机推荐
- 教你用PS快速抠出长发
抠简单的长发背景时可以利用快速选择工具,十分方便就能抠出来. 这类背景的图片只需要一个工具就行了,没错,只用快速选择工具. 拖到ps,然后选择快速选择工具. 用工具选中大部分的人 选择.选择并遮住 选 ...
- 模板学习实践一 accumulationtraits
// 11111.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...
- mybatis 插入数据 在没有commit时 获取主键id
<insert id="insert" parameterType="Mail" useGeneratedKeys="true" ...
- Git+Github入门
1.安装Git git 返回上一级文件命令 cd ..(cd 和..之间有空格) 2.安装完成后需进一步设置,在命令行输入 3.选择一个合适的地方创建一个空目录 pwd命令用于显示当前目录 4.通过g ...
- ABP框架系列之二十九:(Hangfire-Integration-延迟集成)
Introduction Hangfire is a compherensive background job manager. You can integrate ASP.NET Boilerpla ...
- VUE 动态给对象增加属性,并触发视图更新。
在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的. 根据官方文档定义 ...
- php,mysql存储过程的简单例子
一.连接mysql 使用phpmyadmin: 打开test数据库: 二.创建存储过程 参数如图. 三.php中调用存储过程 <?php $user = "root"; // ...
- MySQL中校验规则(collation)的选取对实际数据筛选的影响
在mysql中存在着各种utf8编码格式,如下表:1)utf8_bin2)utf8_general_ci utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写.utf8_genera_c ...
- VDD,VCC,VSS,VEE,VDDA,VSSA,
VDD是主供电电源,也是IO口输出电平的输入电源.VDDA(A表示模拟)是模拟电源,当使用到模拟信号的时候,比如AD(模数)或者DA(数模)的时候,系统会使用VDDA的电压作为参考电压来.不要求精准使 ...
- 20155326刘美岑 《网络对抗》Exp1 PC平台逆向破解
20155326刘美岑 <网络对抗>逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...