From d24be4da0b0214a2c8f2424b0a4780c68c073f8a Mon Sep 17 00:00:00 2001 From: hotyue <52734432+hotyue@users.noreply.github.com> Date: Mon, 27 Apr 2026 01:54:59 +0000 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E9=87=8D=E6=9E=84=E5=85=A8?= =?UTF-8?q?=E7=90=83=E6=97=B6=E9=92=9F=E5=90=8C=E6=AD=A5=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E5=BC=BA=E5=88=B6=E6=8C=82=E8=BD=BD=E7=BB=9D=E5=AF=B9?= =?UTF-8?q?=20UTC=20=E6=97=B6=E5=8C=BA=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=88=86?= =?UTF-8?q?=E5=B8=83=E8=8A=82=E7=82=B9=E5=A4=A9=E7=84=B6=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E5=89=8A=E5=B3=B0=E4=B8=8E=E6=88=98=E6=8A=A5=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/daily_keywords.yml | 4 ++-- .github/workflows/ua_factory.yml | 4 ++-- core/install.sh | 36 ++++++++++++++++++---------- core/tg_report.sh | 5 +++- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/.github/workflows/daily_keywords.yml b/.github/workflows/daily_keywords.yml index b1babcd..8f7f221 100644 --- a/.github/workflows/daily_keywords.yml +++ b/.github/workflows/daily_keywords.yml @@ -2,8 +2,8 @@ name: Daily Data Factory on: schedule: - # 每天 UTC 18:00 (北京时间凌晨 02:00) 执行,赶在节点凌晨3点更新前造好子弹 - - cron: '0 18 * * *' + # 每天 UTC 03:00 执行,为各节点全天随机拉取准备好弹药 + - cron: '0 3 * * *' workflow_dispatch: env: diff --git a/.github/workflows/ua_factory.yml b/.github/workflows/ua_factory.yml index 02822b0..4324f52 100644 --- a/.github/workflows/ua_factory.yml +++ b/.github/workflows/ua_factory.yml @@ -2,8 +2,8 @@ name: Automated Massive UA Factory on: schedule: - # 每个月 1 号凌晨 00:00 执行 - - cron: '0 0 1 * *' + # 每个月 1 号凌晨 04:00 执行 + - cron: '0 4 1 * *' workflow_dispatch: # 允许手动点击运行 jobs: diff --git a/core/install.sh b/core/install.sh index 9b339e4..e28de0c 100755 --- a/core/install.sh +++ b/core/install.sh @@ -667,8 +667,12 @@ fi # 7. 配置系统定时任务 (高频调度与看门狗) echo -e "\n[7/7] 正在注入系统守护进程与调度器..." -# [v3.3.0 新增] 初始化 UA 指纹库更新时间戳,确立 30 天滚动周期的计算锚点 -echo $(date +%s) > "${INSTALL_DIR}/core/.ua_last_update" +# [时钟同步核心] 获取部署时的绝对 UTC 时间锚点,用于打散全球节点的云端拉取并发 +DEPLOY_UTC_HOUR=$(date -u +%H) +DEPLOY_UTC_MIN=$(date -u +%M) + +# [v3.3.0 新增] 初始化 UA 指纹库更新时间戳,确立 30 天滚动周期的计算锚点 (强制 UTC) +echo $(date -u +%s) > "${INSTALL_DIR}/core/.ua_last_update" if command -v systemctl >/dev/null 2>&1; then echo "💡 检测到 Systemd 环境,正在部署原生守护服务..." @@ -720,7 +724,8 @@ EOF [Unit] Description=Timer for IP-Sentinel Updater Service [Timer] -OnCalendar=*-*-* 03:00:00 +# [绝对 UTC 锚点] 每天精确在部署的时刻触发,实现全球请求的天然削峰 +OnCalendar=*-*-* ${DEPLOY_UTC_HOUR}:${DEPLOY_UTC_MIN}:00 UTC Persistent=true Unit=ip-sentinel-updater.service [Install] @@ -750,7 +755,8 @@ EOF [Unit] Description=Timer for IP-Sentinel Telegram Report Service [Timer] -OnCalendar=*-*-* 08:00:00 +# [绝对 UTC 锚点] 全球统一:每天 UTC 16:00 准时向司令部发送战报 +OnCalendar=*-*-* 16:00:00 UTC Unit=ip-sentinel-report.service [Install] WantedBy=timers.target @@ -809,18 +815,22 @@ EOF rm -f /tmp/cron_clean # 2. 写入我们的死循环守护进程 - cat > ${INSTALL_DIR}/core/sentinel_scheduler.sh << 'EOF' + # [极客修复] 将 << 'EOF' 变为 << EOF,以允许在安装时将部署时刻的 DEPLOY_UTC 变量作为硬编码注入脚本中 + cat > ${INSTALL_DIR}/core/sentinel_scheduler.sh << EOF #!/bin/bash while true; do - MIN=$(date +%M) - HOUR=$(date +%H) - if [ "$MIN" == "00" ] || [ "$MIN" == "30" ]; then + # 强制获取绝对 UTC 时分,免疫系统错误时区 + MIN=\$(date -u +%M) + HOUR=\$(date -u +%H) + if [ "\$MIN" == "00" ] || [ "\$MIN" == "30" ]; then /bin/bash /opt/ip_sentinel/core/runner.sh >/dev/null 2>&1 fi - if [ "$HOUR" == "03" ] && [ "$MIN" == "00" ]; then + # [绝对 UTC 锚点] 基于部署时刻的锚点触发热数据更新,天然并发削峰 + if [ "\$HOUR" == "${DEPLOY_UTC_HOUR}" ] && [ "\$MIN" == "${DEPLOY_UTC_MIN}" ]; then /bin/bash /opt/ip_sentinel/core/updater.sh >/dev/null 2>&1 fi - if [ "$HOUR" == "08" ] && [ "$MIN" == "00" ]; then + # [绝对 UTC 锚点] 统一 UTC 16:00 发送战报 + if [ "\$HOUR" == "16" ] && [ "\$MIN" == "00" ]; then /bin/bash /opt/ip_sentinel/core/tg_report.sh >/dev/null 2>&1 fi if ! pgrep -f 'webhook.py' >/dev/null; then @@ -851,10 +861,12 @@ EOF # ========================================== crontab -l 2>/dev/null | grep -v "ip_sentinel" > /tmp/cron_backup || true echo "*/30 * * * * ${INSTALL_DIR}/core/runner.sh >/dev/null 2>&1" >> /tmp/cron_backup - echo "0 3 * * * ${INSTALL_DIR}/core/updater.sh >/dev/null 2>&1" >> /tmp/cron_backup + # [绝对 UTC 锚点] 每天精确在部署的 UTC 时刻触发 + echo "${DEPLOY_UTC_MIN} ${DEPLOY_UTC_HOUR} * * * ${INSTALL_DIR}/core/updater.sh >/dev/null 2>&1" >> /tmp/cron_backup if [[ -n "$TG_TOKEN" ]] && [[ -n "$CHAT_ID" ]]; then - echo "0 8 * * * ${INSTALL_DIR}/core/tg_report.sh >/dev/null 2>&1" >> /tmp/cron_backup + # [绝对 UTC 锚点] 统一 UTC 16:00 + echo "0 16 * * * ${INSTALL_DIR}/core/tg_report.sh >/dev/null 2>&1" >> /tmp/cron_backup echo "$SAFE_PUBLIC_IP" > "${INSTALL_DIR}/core/.last_ip" if command -v rc-update >/dev/null 2>&1 && [ -d "/etc/local.d" ]; then diff --git a/core/tg_report.sh b/core/tg_report.sh index 93a6300..9baeab5 100755 --- a/core/tg_report.sh +++ b/core/tg_report.sh @@ -164,7 +164,7 @@ else MSG="$MSG 🕒 **最近执行快照 [${LAST_MOD:-"System"}]:** -时间: ${LAST_TIME:-"暂无数据"} +时间: ${LAST_TIME:-"暂无数据"} (节点本地) 结论: ${LAST_SCORE:-"暂无数据"}" fi @@ -174,6 +174,8 @@ fi # ========================================== # 从配置文件提取当前本地版本,若无则默认为未知 LOCAL_VER="${AGENT_VERSION:-未知}" +# [时区对齐] 强制获取当前绝对 UTC 时间,作为全局统一的战报落款 +REPORT_UTC_TIME=$(date -u "+%Y-%m-%d %H:%M:%S UTC") # 极轻量级探针: 抓取 GitHub 云端的 version.txt (超时 3 秒,KV解析法) REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main" @@ -183,6 +185,7 @@ REMOTE_VER=$(curl -s -m 3 "${REPO_RAW_URL}/version.txt" | grep "^AGENT_VERSION=" MSG="$MSG ---------------------------- 🛡️ **系统引擎状态** +⏱️ 战报生成: \`${REPORT_UTC_TIME}\` 当前运行版本: \`v${LOCAL_VER}\`" # 比对逻辑:如果成功抓到了远端版本,且和本地不一样