41 lines
1.3 KiB
Bash
41 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
URL=$1
|
|
TIMEOUT=60 # 60秒超时
|
|
COUNT=0
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始等待 Redis 服务启动"
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Redis URL: ${URL}"
|
|
|
|
while [ $COUNT -lt $TIMEOUT ]
|
|
do
|
|
# 尝试连接 Redis 并捕获输出
|
|
REDIS_OUTPUT=$(redis-cli -u $URL PING 2>&1)
|
|
REDIS_STATUS=$?
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 尝试连接 Redis (${COUNT}/${TIMEOUT})"
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Redis 响应: ${REDIS_OUTPUT}"
|
|
|
|
if [ $REDIS_STATUS -eq 0 ] && echo "$REDIS_OUTPUT" | grep -q PONG; then
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Redis 服务已就绪"
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Redis 连接成功,退出等待"
|
|
exit 0
|
|
else
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Redis 连接失败,状态码: ${REDIS_STATUS}"
|
|
fi
|
|
|
|
COUNT=$((COUNT + 1))
|
|
if [ $COUNT -eq $TIMEOUT ]; then
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误: Redis 服务在 ${TIMEOUT} 秒内未就绪"
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 最后一次尝试结果: ${REDIS_OUTPUT}"
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 退出等待"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 等待 1 秒后重试..."
|
|
sleep 1
|
|
done
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 脚本异常退出"
|
|
exit 1
|