redis持久化数据加载检测

1.此脚本的功能,重启服务器之后或者重启redis容器之后,检测redis将aof持久化数据是否加载完成,加载完成之后再去启动其他业务服务,防止业务服务连接不上redis

2.脚本(修改自己的redis连接信息等)

[root@snort shell]# cat check_redis_persistence_status.sh 
#!/bin/bash

# Redis配置
REDIS_HOST="localhost"                # Redis主机
REDIS_PORT="6379"                    # Redis端口
REDIS_PASS="123456"                  # Redis密码
REDIS_CONTAINER_NAME="redis"          # Redis容器名称
PERSISTENCE_LOADING_MSG="loading:0"   # 持久化加载完成的消息

# 日志文件
REDIS_LOG="/data/aibox-common/redis/shell/redis.log"

# 获取当前时间(精确到秒)
get_current_time() {
    date +"%Y-%m-%d %H:%M:%S"
}

# 检查Redis是否持久化数据加载完成
check_redis_persistence() {
    persistence_info=$(docker exec "$REDIS_CONTAINER_NAME" redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" -a "$REDIS_PASS" info persistence)
    echo "$(get_current_time) - Redis持久化信息:$persistence_info" >> "$REDIS_LOG"
    if [[ $persistence_info =~ $PERSISTENCE_LOADING_MSG ]]; then
        echo "$(get_current_time) - Redis持久化数据加载完成." >> "$REDIS_LOG"
        return 0
    else
        echo "$(get_current_time) - Redis持久化数据正在加载中..." >> "$REDIS_LOG"
        return 1
    fi
}

# 主循环,等待持久化数据加载完成
wait_for_redis_persistence() {
    echo "$(get_current_time) - 等待Redis持久化数据加载完成..." >> "$REDIS_LOG"
    while ! check_redis_persistence; do
        sleep 1
    done
}

# 启动业务服务
start_my_service() {
    echo "$(get_current_time) - 启动业务服务..." >> "$REDIS_LOG"
    docker restart cm
    # 这里是启动你的业务服务的命令,替换为你的实际命令
}

# 主函数
main() {
    wait_for_redis_persistence
    start_my_service
}

# 执行主函数
main

 

posted @ 2024-03-27 15:30  Leonardo-li  阅读(18)  评论(0编辑  收藏  举报