From df77f397aab7b57b315d1223888f50861495783a Mon Sep 17 00:00:00 2001 From: hotyue <52734432+hotyue@users.noreply.github.com> Date: Tue, 28 Apr 2026 00:05:26 +0000 Subject: [PATCH] =?UTF-8?q?fix(master):=20=E5=AF=B9=E9=BD=90=20Agent=20?= =?UTF-8?q?=E6=9E=B6=E6=9E=84=EF=BC=8C=E9=87=8D=E6=9E=84=E4=B8=AD=E6=9E=A2?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=99=A8=E5=BC=95=E5=85=A5=E5=8E=9F=E5=AD=90?= =?UTF-8?q?=E5=8C=96=E9=98=B2=E7=A0=96=E4=BA=A4=E6=8E=A5=E4=B8=8E=20SIGKIL?= =?UTF-8?q?L=20=E7=BB=9D=E5=AF=B9=E6=8A=B9=E6=9D=80=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- master/install_master.sh | 42 +++++++++++++++++++++++++------------- master/uninstall_master.sh | 2 ++ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/master/install_master.sh b/master/install_master.sh index 70ee1e2..1011544 100755 --- a/master/install_master.sh +++ b/master/install_master.sh @@ -104,13 +104,8 @@ else fi fi -# ================== [v3.2.2 优化: 安装前环境纯净度清理与数据保护] ================== -echo -e "\n⏳ 正在清理旧版 Master 守护进程..." -# [新增] 优雅停止 Systemd 服务,防止代码替换时引发无限复活风暴 -if command -v systemctl >/dev/null 2>&1; then - systemctl stop ip-sentinel-master.service >/dev/null 2>&1 || true -fi -pkill -9 -f "tg_master.sh" >/dev/null 2>&1 || true +# ================== [v3.2.2 优化: 数据纯净度清理与保护] ================== +echo -e "\n⏳ 正在验证本地环境与数据..." if [ "$UPGRADE_MODE" == "true" ]; then if [ "$KEEP_DB" == "false" ]; then @@ -119,13 +114,11 @@ if [ "$UPGRADE_MODE" == "true" ]; then else echo -e "📦 历史节点数据库 (SQLite) 已绝密保留。" fi - # 删除旧的核心脚本,准备拉取新的 - rm -f "${MASTER_DIR}/tg_master.sh" 2>/dev/null + # [防砖修复] 移除过早的旧进程抹杀与脚本物理删除,防止拉取失败导致司令部变砖失联 else # 焦土政策:如果不是升级模式,直接扬了整个司令部目录 rm -rf "$MASTER_DIR" 2>/dev/null fi -echo -e "\033[32m✅ 旧进程已肃清!\033[0m" # ======================================================================= # 1. 依赖检查与智能安装 (v3.6.0 兼容性与优雅性升级) @@ -287,10 +280,31 @@ chmod 600 "${MASTER_DIR}/master.conf" chmod 600 "$DB_FILE" # ==================================================================== -# 4. 拉取核心调度代码并运行 -echo -e "\n[4/4] 部署 TG 调度守护进程..." -# [修改] 剥离了写死的网址,改用顶部的 ${REPO_RAW_URL} 变量,确保与卸载脚本的数据源同源 -curl -sL "${REPO_RAW_URL}/master/tg_master.sh" -o "${MASTER_DIR}/tg_master.sh" +# 4. 拉取核心调度代码并执行原子化交接 +echo -e "\n[4/4] 正在拉取新版司令部核心引擎..." + +TMP_MASTER="/tmp/ip_sentinel_master_core_$$" +curl -sL "${REPO_RAW_URL}/master/tg_master.sh" -o "$TMP_MASTER" + +# 🛡️ 防砖终极校验 +if [ ! -s "$TMP_MASTER" ]; then + echo -e "\033[31m❌ 致命错误:中枢核心代码拉取失败!网络阻断或 GitHub Raw 异常。\033[0m" + echo "🛡️ 防砖机制触发:已中止覆盖,旧版司令部仍在安全运行中。" + rm -f "$TMP_MASTER" + exit 1 +fi + +# 🟢 [原子化交接核心]: 校验完美通过,新代码已备妥! +# 以雷霆手段抹杀旧版调度进程,杜绝文件覆写时的并发错乱 +echo "⏳ 新引擎校验通过,正在抹杀旧版守护进程..." +if command -v systemctl >/dev/null 2>&1; then + systemctl kill --signal=SIGKILL ip-sentinel-master.service >/dev/null 2>&1 || true + systemctl stop ip-sentinel-master.service >/dev/null 2>&1 || true +fi +pkill -9 -f "tg_master.sh" >/dev/null 2>&1 || true + +# 执行物理替换 +mv "$TMP_MASTER" "${MASTER_DIR}/tg_master.sh" chmod +x "${MASTER_DIR}/tg_master.sh" if command -v systemctl >/dev/null 2>&1; then diff --git a/master/uninstall_master.sh b/master/uninstall_master.sh index aed61fc..78cc327 100644 --- a/master/uninstall_master.sh +++ b/master/uninstall_master.sh @@ -38,6 +38,8 @@ fi echo "[1/4] 正在停止并删除 Systemd 服务..." if command -v systemctl >/dev/null 2>&1; then echo "💡 检测到 Systemd 环境,正在抹除 Systemd 服务单元..." + # [防死锁修复] 先发送 SIGKILL 瞬间抹杀,防止卡死 + systemctl kill --signal=SIGKILL ip-sentinel-master.service >/dev/null 2>&1 || true systemctl disable --now ip-sentinel-master.service >/dev/null 2>&1 rm -f /etc/systemd/system/ip-sentinel-master.service systemctl daemon-reload