mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-19 10:40:44 +00:00
清理误提交的测试数据目录 + 扩展 .gitignore
This commit is contained in:
+42
-14
@@ -71,6 +71,8 @@ THRESHOLD=3
|
||||
# 重启本地隧道解决不了,只会自伤。给足时间让它自己恢复。
|
||||
# 连接真的掉下去了(降级),才用 THRESHOLD=3 快速重启。
|
||||
THRESHOLD_HEALTHY=8
|
||||
# 连接"中等"(4~5 条)时的阈值:比很差时耐心一点,比健康时严一点。
|
||||
THRESHOLD_MID=5
|
||||
STALE_MINUTES=10 # 日志多久没动静算卡死
|
||||
# 两次重启至少隔这么久。
|
||||
# 150 秒不是拍脑袋:隧道在差的 4G 上重建 5 条连接要 30~60 秒,
|
||||
@@ -105,15 +107,26 @@ write_state() {
|
||||
|
||||
# 读某个 metrics 端口的连接数。
|
||||
# 端口不通(实例死了)→ 输出 "X"(区分于 "0":0 是活着但没连接)
|
||||
#
|
||||
# ⚠ 必须重试。之前只用一次 `curl --max-time 4` 判定,
|
||||
# 设备忙的时候(CPU 被别的进程占住、SSD/IO 抖动)curl 会超时,
|
||||
# 于是被误判成"实例无响应"进而重启隧道 —— 一次误判就是 26 秒中断。
|
||||
# 历史重启原因里 8 次有 6 次写的是"实例无响应",其中一部分很可能是
|
||||
# 这种假阳性(真死的只有那次服务被我 stop 掉的)。
|
||||
# 给 3 次机会、每次间隔 1 秒,把瞬时超时排除掉。
|
||||
conns_of() {
|
||||
local port="$1" out
|
||||
out=$(timeout 5 curl -s --max-time 4 "http://127.0.0.1:$port/metrics" 2>/dev/null \
|
||||
| grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}')
|
||||
if [ -z "$out" ]; then
|
||||
echo "X"
|
||||
else
|
||||
echo "$out"
|
||||
fi
|
||||
local port="$1" out attempt
|
||||
for attempt in 1 2 3; do
|
||||
out=$(timeout 6 curl -s --max-time 5 \
|
||||
"http://127.0.0.1:$port/metrics" 2>/dev/null \
|
||||
| grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}')
|
||||
if [ -n "$out" ]; then
|
||||
echo "$out"
|
||||
return
|
||||
fi
|
||||
[ "$attempt" -lt 3 ] && sleep 1
|
||||
done
|
||||
echo "X"
|
||||
}
|
||||
|
||||
# 重启指定的一组服务(带最小间隔保护)
|
||||
@@ -295,15 +308,30 @@ if [ "$DEGRADED" = "1" ]; then
|
||||
fi
|
||||
|
||||
if [ "$FAIL" -ge "$THRESHOLD" ] || [ "$ZERO" -ge "$THRESHOLD" ]; then
|
||||
# 连接还健康的话,用更宽的阈值 —— 别把"抖一下"升级成 1 分钟中断
|
||||
if [ "$TOTAL" -ge "$BUILT_MIN" ] 2>/dev/null && [ "$ZERO" -lt "$THRESHOLD" ]; then
|
||||
if [ "$FAIL" -lt "$THRESHOLD_HEALTHY" ]; then
|
||||
log "公网连续 $FAIL 次不通,但连接健康(合计 $TOTAL 条)—— 再等等,不重启"
|
||||
write_state "$ZERO" "$FAIL" "$BUILT"
|
||||
exit 0
|
||||
# 按连接健康程度分三档,越健康越有耐心 ——
|
||||
# 别把"抖一下"升级成 1 分钟中断。
|
||||
#
|
||||
# TOTAL >= 6 健康 -> 要连续 8 次(约 2.5 分钟)
|
||||
# 4 <= TOTAL < 6 中等 -> 连续 5 次(约 1.7 分钟)
|
||||
# TOTAL < 4 很差 -> 保持 3 次(约 1 分钟)
|
||||
#
|
||||
# 中间的 5 次那一档是补上的:原来只要 TOTAL < 6 就直接用 3 次,
|
||||
# 于是 4 条连接(虽然不满但还能扛)也会在一分钟内被重启。
|
||||
local_threshold=$THRESHOLD
|
||||
if [ "$ZERO" -lt "$THRESHOLD" ]; then
|
||||
if [ "$TOTAL" -ge "$BUILT_MIN" ] 2>/dev/null; then
|
||||
local_threshold=$THRESHOLD_HEALTHY
|
||||
elif [ "$TOTAL" -ge 4 ] 2>/dev/null; then
|
||||
local_threshold=$THRESHOLD_MID
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$FAIL" -lt "$local_threshold" ]; then
|
||||
log "公网连续 $FAIL 次不通,连接 $TOTAL 条(阈值 $local_threshold)—— 再等等,不重启"
|
||||
write_state "$ZERO" "$FAIL" "$BUILT"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 有实例只是"低连接"(不是完全没响应)时,只重启那些实例;
|
||||
# 全都低就重启全部。
|
||||
if [ "${#LOW_SVCS[@]}" -gt 0 ] && [ "${#LOW_SVCS[@]}" -lt "${#ALL_SVCS[@]}" ]; then
|
||||
|
||||
Reference in New Issue
Block a user