shell 匹配日志指定字段触发清理redis的任务

shell 匹配日志指定字段触发清理redis的任务

背景

公司一个服务经常因为redis没清空而导致服务不可用,这段开发代码也可以解决,但是不知道为什么没这么做
写了一个脚本,根据匹配日志中是否有TP_SYS_ORG_USER或TP_SYS_USER这两个字段来决定是否清空redis的模糊匹配内容

clear_redis.sh

#!/bin/bash
REDISIP=192.168.61.54
REDISPORT=6379
REDISPASSWD=YuaNian@2999!
REDISDATABASE=1
KEYS="cicd:v2:cp:metadataDataSecurity2*"
CHANGE=false

//清理redis的任务
DELKEYS() {
    if [[ $CHANGE == true ]];then
        echo "redis-cli -h  ${REDISIP} -p ${REDISPORT} -a ${REDISPASSWD} -n ${REDISDATABASE} KEYS \"${KEYS}\" | xargs redis-cli -h  ${REDISIP} -p ${REDISPORT} -a ${REDISPASSWD} -n ${REDISDATABASE} DEL "   > redis_clear_tmp.sh
        bash redis_clear_tmp.sh;rm -rf redis_clear_tmp.sh
    else
        echo "CHANGE=false"
    fi
}

//检查文件MD5s值是否变化并判断日志是否含有指定字符串
CHECKFILE() {
    [[ ! -f fileid/filemd5sum ]] && echo "md5file is missing" && mkdir -p fileid  && echo "new" > fileid/filemd5sum
    fileidold=`cat fileid/filemd5sum`
    fileidnew=`md5sum /opt/canal/canal-adapter/logs/adapter/adapter.log  | awk '{print $1}'`
    if [[ $fileidold == ${fileidnew} ]];then
        echo "fileid is same,pass"
    else
        echo "${fileidnew}" >  fileid/filemd5sum
        echo "new fileid is ${fileidnew}"
        DATE=`date "+%Y-%m-%d %H:%M"`
		//截取日志的时间戳,日志是以2022-11-22 16:45:19 开头,我这里截取  2022-11-22 16:4*模糊匹配10分钟内的,需要更精细的可以更改确认到秒
        CUTDATE=`echo ${DATE:0:15}`
        INLOG=`cat /opt/canal/canal-adapter/logs/adapter/adapter.log  | grep "${CUTDATE}*" | grep -E "TP_SYS_ORG_USER|TP_SYS_USER" | wc -l`
        if [[ ${INLOG} -gt 0 ]];then
            CHANGE=true
            DELKEYS
        else
            echo  "table TP_SYS_ORG_USER|TP_SYS_USER has no change"
        fi
    fi
}

//定义更多清理redis的触发条件,这里只有一个,根据文件id和内容清理
MAIN() {
    CHECKFILE
}


MAIN
posted @ 2022-11-22 17:30  liwenchao1995  阅读(49)  评论(0编辑  收藏  举报