Files
Hermes-Skills/devops/clash-docker-workflow/scripts/update-sub.sh
T
Hermes Skills Manager 6770bc9b9d Initial commit: Hermes Agent skills collection
- Trading skills (OKX, dividend, lottery, quantitative)
- Creative skills (ASCII art, diagrams, video)
- Development skills (GitHub, debugging, TDD)
- Research skills (arXiv, blog monitoring)
- Productivity skills (email, documents, notes)
- MCP integration skills
- Custom user skills
2026-07-05 02:31:15 -04:00

71 lines
2.4 KiB
Bash

#!/bin/bash
# Clash 订阅自动更新脚本
# 直连下载订阅(不走代理,避免循环依赖)→ 注入 required params → 热重载
# Usage: bash update-sub.sh [SUBSCRIPTION_URL]
#
# Customize these variables for your deployment:
# SUB_URL — subscription URL (default: reads from ~/clash/sub-url.conf)
# CONFIG — path to mihomo config.yaml
set -e
CLASH_DIR="${CLASH_DIR:-$HOME/clash}"
# Read subscription URL from conf file or CLI arg
if [ -n "$1" ]; then
SUB_URL="$1"
elif [ -f "$CLASH_DIR/sub-url.conf" ]; then
source "$CLASH_DIR/sub-url.conf"
else
echo "错误: 找不到 $CLASH_DIR/sub-url.conf,也未传入 URL 参数"
exit 1
fi
CONFIG="${CONFIG:-$CLASH_DIR/config/config.yaml}"
TMP_FILE=$(mktemp)
LOCK_FILE="/tmp/clash-update.lock"
# 防止并发
exec 200>"$LOCK_FILE"
flock -n 200 || { echo "[$(date -Iseconds)] Already running, skipping"; exit 0; }
echo "[$(date -Iseconds)] Starting subscription update (direct, no proxy)..."
# 直连下载,不走代理
# 原因:代理本身依赖订阅配置,走代理更新 = 循环依赖死锁
HTTP_CODE=$(curl -L --connect-timeout 10 --max-time 30 \
-H "User-Agent: clash-verge/v2.0.0" \
-w "%{http_code}" -o "$TMP_FILE" \
"$SUB_URL" 2>/dev/null)
if [ "$HTTP_CODE" != "200" ]; then
echo " FAIL: Subscription download failed (HTTP $HTTP_CODE)"
rm -f "$TMP_FILE"
exit 1
fi
# Inject required params that raw subscriptions often omit
sed -i "/external-controller:/c\external-controller: '0.0.0.0:9090'" "$TMP_FILE"
grep -q "^mixed-port:" "$TMP_FILE" || sed -i "1i mixed-port: 7890" "$TMP_FILE"
grep -q "^allow-lan:" "$TMP_FILE" || sed -i "1a allow-lan: true" "$TMP_FILE"
grep -q "^mode:" "$TMP_FILE" || sed -i "1a mode: rule" "$TMP_FILE"
grep -q "^log-level:" "$TMP_FILE" || sed -i "1a log-level: info" "$TMP_FILE"
cp "$TMP_FILE" "$CONFIG"
rm -f "$TMP_FILE"
NODE_COUNT=$(grep -c 'name:' "$CONFIG" 2>/dev/null || echo 0)
echo " OK: Subscription updated, $NODE_COUNT nodes"
# Hot-reload via mihomo REST API (preferred over restart — preserves connections)
if curl -s -o /dev/null http://127.0.0.1:9090/version 2>/dev/null; then
curl -s -X PUT http://127.0.0.1:9090/configs \
-H 'Content-Type: application/json' \
-d "{\"path\":\"$CONFIG\"}" > /dev/null 2>&1
echo " OK: Hot-reload complete"
else
echo " WARN: mihomo not running, skipped hot-reload"
fi
echo "[$(date -Iseconds)] Update complete"