feat(common): 添加GlowFilter的Level字段

添加了GlowFilter结构体中的Level字段,用于表示等级信息,
对应JSON标签为"level,omitempty"

---

fix(utils): 修复concurrent_swiss_map中的panic处理

- 使用goroutine替代线程池来监听通道
- 添加panic恢复机制,当发生panic时记录错误日志
- 确保在异常情况下程序能够
This commit is contained in:
昔念
2026-01-25 23:17:46 +08:00
parent 4dd05726af
commit fa928c9a48
20 changed files with 156 additions and 210 deletions

View File

@@ -197,93 +197,11 @@ else
command -v screen || { echo "❌ Screen安装失败"; exit 1; }
fi
#!/bin/bash
# 核心无任何可能阻塞的命令全程实时输出100%不卡住 + 彻底清理所有logic会话
set -euo pipefail
# ===== 仅需配置这1个变量 =====
SCREEN_NAME="logic"
# ===== 颜色输出函数(确保能看到输出)=====
red() { echo -e "\033[31m[$(date +%H:%M:%S)] $1\033[0m"; }
green() { echo -e "\033[32m[$(date +%H:%M:%S)] $1\033[0m"; }
yellow() { echo -e "\033[33m[$(date +%H:%M:%S)] $1\033[0m"; }
# ===== 新增彻底清理screen会话核心修复=====
clean_screen_sessions() {
local sess_id=$1
# 1. 先优雅关闭screen会话
screen -S "${sess_id}" -X quit >/dev/null 2>&1 || true
sleep 0.3
# 2. 提取会话PID并强制杀死
local sess_pid=$(echo "${sess_id}" | cut -d. -f1)
if [ -n "${sess_pid}" ]; then
kill -9 "${sess_pid}" >/dev/null 2>&1 || true
# 3. 杀死该PID的所有子进程
pkill -9 -P "${sess_pid}" >/dev/null 2>&1 || true
fi
}
# ===== 强制关闭所有阻塞的后台进程(先清场)=====
green "【步骤1/5】清理脚本自身可能的阻塞进程"
pkill -f "screen_clean_*" >/dev/null 2>&1 || true
pkill -9 -f "pgrep -f SCREEN -S ${SCREEN_NAME}" >/dev/null 2>&1 || true
# ===== 非阻塞查找进程+会话关键延长超时到1秒查更全=====
green "【步骤2/5】查找${SCREEN_NAME}相关进程/会话(非阻塞)"
# 先查screen会话ID1秒超时避免漏查
SCREEN_SESS=$(timeout 1 screen -ls 2>/dev/null | grep -E "[0-9]+\\.${SCREEN_NAME}" | grep -v "Dead" | awk '{print $1}' || true)
# 再查进程PID
SCREEN_PIDS=$(timeout 1 pgrep -f "SCREEN -S ${SCREEN_NAME}" | grep -v $$ || true)
# 合并需要清理的目标
if [ -z "${SCREEN_SESS}" ] && [ -z "${SCREEN_PIDS}" ]; then
green "✅ 未找到${SCREEN_NAME}相关进程/会话,无需清理"
else
yellow "⚠️ 找到${SCREEN_NAME}会话:${SCREEN_SESS:-无}"
yellow "⚠️ 找到${SCREEN_NAME}进程:${SCREEN_PIDS:-无}"
# ===== 非阻塞强制清理(先清会话,再清进程)=====
green "【步骤3/5】强制清理${SCREEN_NAME}进程及会话"
# 1. 清理所有screen会话
if [ -n "${SCREEN_SESS}" ]; then
for sess in ${SCREEN_SESS}; do
yellow "🔧 清理会话:${sess}"
clean_screen_sessions "${sess}"
done
fi
# 2. 清理剩余进程(兜底)
if [ -n "${SCREEN_PIDS}" ]; then
for pid in ${SCREEN_PIDS}; do
yellow "🔧 清理进程:${pid}"
kill -9 "${pid}" >/dev/null 2>&1 || true
pkill -9 -P "${pid}" >/dev/null 2>&1 || true
done
fi
# 短暂等待0.5秒,非阻塞)
sleep 0.5
# ===== 验证清理结果(查会话+进程,双重验证)=====
green "【步骤4/5】验证清理结果会话+进程双重检查)"
FINAL_SESS=$(timeout 1 screen -ls 2>/dev/null | grep -E "[0-9]+\\.${SCREEN_NAME}" | grep -v "Dead" || true)
FINAL_PIDS=$(timeout 1 pgrep -f "SCREEN -S ${SCREEN_NAME}" | grep -v $$ || true)
if [ -z "${FINAL_SESS}" ] && [ -z "${FINAL_PIDS}" ]; then
green "✅ ${SCREEN_NAME}进程/会话已全部清理完成"
else
red "❌ 仍有残留:会话[${FINAL_SESS}] 进程[${FINAL_PIDS}],再次强制清理"
# 终极兜底:强制杀死所有相关进程
pkill -9 -f "${SCREEN_NAME}" >/dev/null 2>&1 || true
fi
fi
# ===== 最终收尾 =====
green "【步骤5/5】${SCREEN_NAME}会话清理流程结束"
green "✅ 自动化部署后续流程可正常执行"
# ===== 准备下载目录 =====
@@ -311,10 +229,8 @@ echo "下载链接:%s{file_url}"
echo "目标路径:%s{exe_path}"
# 删除旧文件(关键修复:这里要判断目标路径,不是下载链接)
if [ -f "%s{exe_path}" ]; then
echo "删除旧文件:%s{exe_path}"
rm -f "%s{exe_path}"
fi
echo "删除旧文件:%s{exe_path}"
rm -f "%s{exe_path}"
echo "开始下载..."
DOWNLOAD_SUCCESS=0