1 Star 0 Fork 38

zhuguodong/rsyslog

forked from src-openEuler/rsyslog 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
os_rotate_and_save_log.sh 3.13 KB
一键复制 编辑 原始数据 按行查看 历史
hexiaowen 提交于 2019-09-30 11:16 . Package init
#!/bin/bash
###########################################################################
#File Name:os_rotate_and_save_log.sh
#Description: Save the source file to destination directories by size
#Parameter: It is a character string, has three values.
# parameter one, the file which needs to be saved.
# parameter two, the destination directory for saving the file.
# parameter three, logdump dir limit size
#Output:none
###########################################################################
CUR_SCRIPT=$0
PID=$(pidof -x $CUR_SCRIPT)
L_CUR_SCRIPT_RUNNING_COUNT=$(echo "$PID" | wc -w)
#can not be runned twice at the same time
if [ "${L_CUR_SCRIPT_RUNNING_COUNT}" -gt 1 ];then
echo "[$CUR_SCRIPT] $CUR_SCRIPT is running, can not run it twice at one time" >/dev/kmsg
exit 1
fi
#parse parameter
declare -a PARAM_ARRAY
PARAM_ARRAY=($1)
SRC_FILE=${PARAM_ARRAY[0]}
DEST_DIR=${PARAM_ARRAY[1]}
DIR_LIMIT_SIZE=${PARAM_ARRAY[2]}
FILE_NAME=${SRC_FILE##*/}
#get the maximum serial number
SERIEL_NUM=`ls $DEST_DIR|grep "messages-.*-.*\.tar\.bz2"|cut -d '-' -f3 |sort -nr|head -n1|cut -d '.' -f1`
if [ -z $SERIEL_NUM ];then
SERIEL_NUM=0
fi
((SERIEL_NUM=$SERIEL_NUM+1))
TMPNAME=${FILE_NAME}-`date "+%Y%m%d%H%M%S"-${SERIEL_NUM}`
TMPFILE=/tmp/$TMPNAME
#create destination directory
if [ ! -d "$DEST_DIR" ];then
mkdir -p $DEST_DIR
fi
#save the log file to /tmp/
mv $SRC_FILE $TMPFILE
#count the maximum number of bytes in the destination directory
DIR_LIMIT_SIZE_NUM=${DIR_LIMIT_SIZE%[A-Z|a-z]}
DIR_LIMIT_SIZE_UNIT=${DIR_LIMIT_SIZE##[0-9]*[0-9]}
case $DIR_LIMIT_SIZE_UNIT in
M|m)
DIR_LIMIT_SIZE_NUM=$((DIR_LIMIT_SIZE_NUM*1024*1024))
;;
K|k)
DIR_LIMIT_SIZE_NUM=$((DIR_LIMIT_SIZE_NUM*1024))
;;
esac
TAR_PKG_NAME=$TMPFILE.tar.bz2
cd /tmp
tar -cjf $TAR_PKG_NAME $TMPNAME
cd -
#count current dump file size
FILE_SIZE=`du -sb $TAR_PKG_NAME|awk '{print $1}'`
#count the maximum space that a file can occupy in the destination directory if it is to accommodate the current dump file.
((MAX_LEFT_SIZE=$DIR_LIMIT_SIZE_NUM-$FILE_SIZE))
#current total size of files
pushd $DEST_DIR >/dev/null
cursize=`du -sb|awk '{print $1}'`
#delete extraneous files when there is not enough space
if [ "$cursize" -gt "$MAX_LEFT_SIZE" ];then
irrelevant_files=`find $DEST_DIR|grep -v "^$DEST_DIR/$FILE_NAME-.*-.*\.tar\.bz2$" |grep -v "^$DEST_DIR$"`
if [ "$irrelevant_files" != "" ];then
rm -rf $irrelevant_files
echo "[$0]space of output directory $DEST_DIR will be larger than $DIR_LIMIT_SIZE bytes,delete the irrelevant files :$irrelevant_files" >/dev/kmsg
cursize=`du -sb|awk '{print $1}'`
fi
fi
#when the space is still insufficient, delete the oldest log package one by one until it can hold the latest log package
while [ $cursize -gt $MAX_LEFT_SIZE ]
do
del_file=`ls $DEST_DIR|grep "$FILE_NAME-.*-.*\.tar\.bz2"|cut -d '-' -f3|sort -n|head -n1`
if [[ $del_file == "" ]];then
break
fi
del_file=`ls|grep "$FILE_NAME-.*-$del_file"`
echo "[$0]space of output directory is larger than $DIR_LIMIT_SIZE bytes,delete the oldest tar file $del_file" >/dev/kmsg
rm -rf $del_file
cursize=`du -sb|awk '{print $1}'`
done
popd >/dev/null
mv $TAR_PKG_NAME $DEST_DIR
rm -rf $TMPFILE
exit 0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhuguodong/rsyslog.git
git@gitee.com:zhuguodong/rsyslog.git
zhuguodong
rsyslog
rsyslog
master

搜索帮助