polardbxsql/docker/admin/bin/log_cleaner.sh

162 lines
4.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#! /bin/sh
drds_path='/home/admin/drds-server'
cleaner_log='/home/admin/drds-server/logs/cleaner.log'
if [ -z $1 ]; then
max_used=90
else
max_used=$1
fi
cd $drds_path
print() {
if [ -z $2 ]; then
echo $1 >> $cleaner_log
else
echo "level[$2] $1" >> $cleaner_log
fi
}
if [ -z "`ls -A $drds_path`" ]; then
print "$drds_path is empty!"
exit
else
print "handle: $drds_path"
fi
get_disc_space() {
raw_amount=`df -h $drds_path|sed '1d'`
file_system=`echo $raw_amount|awk '{print $1}'`
use=`echo $raw_amount|awk '{print $5+0}'`
mnt=`echo $raw_amount|awk '{print $6}'`
return $use
}
clean_process_log() {
current_process_path=$1
if [ -z "`ls -A $current_process_path`" ]; then
return
else
print "handle: $current_process_path" $2
fi
ls -lhtr $current_process_path|sed '1d'|while read LINE
do
db_path="$current_process_path/`echo $LINE|awk '{print $9}'`"
clean_db_log $db_path $2
get_disc_space
if [ $use -lt $max_used ]; then
return $use
fi
done
}
clean_db_log() {
if [ -z "`ls -A $1`" ]; then
return $use
else
print "handle: $1" $2
fi
if [ -z "`ls -hl $1|sed '1d'|sed '/.\.log/d'|sed '/.\.db/d'`" ]; then
print "no folder remained, clear *.log" $2
ls -hl $1|sed '1d'|sed '/.\.db/d'|sed '/txc.*\.\(.*\.\)*log\.1$/d'|sed '/txc.*\.\(.*\.\)*log$/d'| awk '{print $9}'|while read LINE
do
log_path="$1/$LINE"
clean_log $log_path $2
if [ $use -lt $max_used ]; then
return $use
fi
done
else
skip_count=`expr 5 - $2 \* 2`
if [ $skip_count -lt $[0] ]; then
skip_count=0
fi
total_folder_count=`ls -lhtr $1|sed '1d'|sed '/.\.log/d'|sed '/.\.db/d'|wc -l`
if [ $skip_count -gt $total_folder_count ]; then
print "no folder removed in[$1]" $2
return $use
fi
print "remove folders first" $2
print "skip latest $skip_count folders" $2
if [ $skip_count -gt $[0] ]; then
ls -lhtr $1|sed '1d'|sed '/.\.log/d'|sed '/.\.db/d'|awk '{print $9}'|sort -r -t- -k1,1 -k2,2 -k3,3|sed "1, $skip_count d"|sort -r -t- -k1,1 -k2,2 -k3,3|while read LINE
do
log_path="$1/$LINE"
clean_log $log_path $2
done
else
ls -lhtr $1|sed '1d'|sed '/.\.log/d'|sed '/.\.db/d'|awk '{print $9}'|sort -t- -k1,1 -k2,2 -k3,3|while read LINE
do
log_path="$1/$LINE"
clean_log $log_path $2
done
fi
fi
}
clean_log() {
clean_log_path=`echo $1|sed 's/ /\\\ /g'`
if [ -d $clean_log_path ]; then
print "dir[$clean_log_path] removed!" $2
rm -rvf $clean_log_path
else
print "file[$clean_log_path] cleared!" $2
cat /dev/null > $clean_log_path
fi
get_disc_space
return $use
}
print "clean start! date[`date '+%Y/%m/%d %T'`]===================="
# 0删除5天以前的日志文件夹1删除3天以前的日志文件夹2删除1天前的日志文件夹3删除所有历史日志4删除所有日志
for clean_level in 0 1 2 3 4
do
get_disc_space
if [ $use -ge $max_used ];then
print "path[$drds_path] file system[$file_system] mount on[$mnt] used[$use%]"
eagleeye_log_path="/home/admin/logs/eagleeye"
clean_db_log $eagleeye_log_path $clean_level
ls -hl $drds_path|sed '1d'|sed '/bin/d'|sed '/conf/d'|sed '/lib/d'|sed '/logs/d'|while read LINE
do
process_path="$drds_path/`echo $LINE|awk '{print $9}'`/logs"
clean_process_log $process_path $clean_level
done
txc_log_path="/home/admin/logs/txc"
clean_db_log $txc_log_path $clean_level
else
print "clean finish! current useage[$use%] `date`===================="
exit
fi
done
if [ $use -ge $max_used ];then
clean_log $cleaner_log
fi
use=`df -h $drds_path|sed '1d'|awk '{print $5+0}'`
print "clean finish! current useage[$use%] `date`===================="