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