Deployment中InitContainer问题:无法通过curl获取值并存储到变量
问题分析与修复脚本
原脚本存在两个核心问题:
- 循环内没有重新获取集群大小,变量
n始终是初始值,只要初始值不等于3就会无限循环 - 未处理curl请求失败、jq解析失败的情况,可能导致
n为非数字值,触发条件判断报错
以下是修复后的脚本:
echo "waiting for Hazelcast cluster to reach size 3" while true; do # 直接将curl+jq的结果存入变量,无需临时文件 cluster_size=$(curl -g -s -H "Content-Type: application/json" "http://hazelcast-service.bjy:8711/hazelcast/health" | jq -r '.clusterSize') # 检查是否获取到有效数字 if [[ "$cluster_size" =~ ^[0-9]+$ ]]; then echo "current cluster size: $cluster_size" if [ "$cluster_size" -eq 3 ]; then echo "cluster is ready" exit 0 fi else echo "failed to get valid cluster size, retrying..." fi sleep 5 done
关键修复点:
- 每次循环都重新执行curl请求,获取最新的集群大小
- 用正则表达式检查
cluster_size是否为有效数字,避免非数字值引发的判断错误 - 移除不必要的临时文件,直接通过命令替换将结果存入变量
- 明确判断集群大小等于3时退出循环,逻辑更清晰
- 增加失败提示,方便排查问题
内容的提问来源于stack exchange,提问作者nagu
相关产品推荐
相关产品推荐

