使用shell怎么清理系统日志?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
记录一下shell日志颜色处理
_COLORS=${BS_COLORS:-$(tput colors 2>/dev/null || echo 0)}
__detect_color_support() {
# shellcheck disable=SC2181
if [ $? -eq 0 ] && [ "$_COLORS" -gt 2 ]; then
RC='\033[1;31m'
GC='\033[1;32m'
BC='\033[1;34m'
YC='\033[1;33m'
EC='\033[0m'
else
RC=""
GC=""
BC=""
YC=""
EC=""
fi
}
__detect_color_support
echoerror() {
printf "${RC} * ERROR${EC}: %s\\n" "$@" 1>&2;
}
echoinfo() {
printf "${GC} * INFO${EC}: %s\\n" "$@";
}
echowarn() {
printf "${YC} * WARN${EC}: %s\\n" "$@";
}
下面看下shell清理系统日志
1.设置日志峰值,到达则删除
2.定时检测,crontab添加定时任务
3.后台挂载 : ./xx.sh &
工作脚本:
#! /bin/sh
#日志目录及限定大小
workdir="/var/*.log"
maxsize=100
#搜索最老文件,不加目录默认的本目录里边的文件 r倒序输出 t时间 head -n1取第一行 awk命令括号$1位文件名 管道连接
oldfile(){
oldfile=`ls $workdir -t 2>/dev/null| head -n1 | awk '{printf $1}'`
}
clear_old_log(){
if [ ! $oldfile ]
then
#echo "日志不存在" 1>/dev/null
return 0
fi
while true;
do
oldfile
if [ ! $oldfile ]
then
return 0
fi
logsize=`du -ms $oldfile 2>/dev/null| awk '{printf $1}'` #m表示兆 k b
if [ $logsize -gt $maxsize ]
then
str1="log"
str2="err"
if [[ $oldfile == *$str1* ]]
then
pkill snake
rm -rf $oldfile
fi
if [[ $oldfile == *$str2* ]]
then
service mysql restart
pkill snake
rm -rf $oldfile
fi
else
break
fi
done
}
testing(){
while true;
do
workdir="/var/*.log"
oldfile
clear_old_log
workdir="/var/lib/mysql/*.err"
oldfile
clear_old_log
done
}
testing
定时任务脚本:
#! /bin/sh
#a=`pgrep -f test1.sh|wc -l`
#if [ $(ps -ef|grep test.sh|wc -l) -gt 1 ]
if test $(pgrep -f test.sh|wc -l) -ge 1
then
exit
fi
cd /home/zxd/
./test.sh
下边这个带有日志时间加时间戳及系统负载检测:
#! /bin/bash
strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
echo "包含"
else
echo "不包含"
fi
#日志目录及限定大小
workdir="/var/*.log"
maxsize=100
#给文件加时间戳:函数里的变量必须在脚本函数后边跟着,这里$1不是命令行跟的参数,命令行的参数为脚本的$1
filetime(){
a=$(date +%Y%m%d%H%M%S)
A=$1.$(date +%Y%m%d%H%M%S)
echo $A
}
filetime "/var/log"
#搜索最老文件,不加目录默认的本目录里边的文件 r倒序输出 t时间 head -n1取第一行 awk命令括号$1位文件名 管道连接
oldfile(){
oldfile=`ls $workdir -rt 2>/dev/null| head -n1 | awk '{printf $1}'`
}
clear_old_log(){
if [ ! $oldfile ]
then
echo "日志不存在" 1>/dev/null
return 0
fi
while true;
do
oldfile
if [ ! $oldfile ]
then
echo "日志不存在" 1>/dev/null
return 0
fi
logsize=`du -bs $oldfile 2>/dev/null| awk '{printf $1}'`
if [ $logsize -gt $maxsize ]
then
str1="log"
str2="err"
if [[ $oldfile == *$str1* ]]
then
pkill snake
rm -rf $oldfile
fi
if [[ $oldfile == *$str2* ]]
then
service mysql restart
pkill snake
rm -rf $oldfile
fi
else
break
fi
done
}
testing(){
echo "run"
while true;
do
oldfile
clear_old_log
echo "222"
workdir="/var/lib/mysql/libmaster.err"
oldfile
clear_old_log
done
}
disk=`df |grep /dev/mapper/fedora-root | awk '{printf $5}' | sed 's/%//g'`
echo "磁盘已用:%$disk"
memtotal=`cat /proc/meminfo |grep MemTotal |awk '{printf $2}'`
memfree=`cat /proc/meminfo |grep MemFree |awk '{printf $2}'`
used=$((100- memfree*100/memtotal))
echo "内存已用:%$used"
echo "exit"
testing
关于使用shell怎么清理系统日志问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://www.jb51.net/article/148105.htm