her / cont-init-finalize.sh
guntp's picture
Fix: move Telegram injection to cont-init.d (runs before gateway)
5ce8d41 verified
Raw
History Blame Contribute Delete
2.37 kB
#!/command/with-contenv sh
# =============================================================================
# s6 cont-init.d / 099-hf-finalize —— 在所有官方 cont-init 之后、s6-rc 服务之前运行
# 职责:注入 Telegram 反代 base_url → 修属主 → 启动 HF Bucket 定时备份
# (telegram.base_url 必须在 gateway 启动前写入 config.yaml,否则 gateway
# 读到的是注入前的配置,会直连 api.telegram.org 而 HF 出站不通)
# =============================================================================
set -e
: "${HERMES_HOME:=/opt/data}"
: "${HERMES_UID:=10000}"
: "${HERMES_GID:=10000}"
: "${HF_BUCKET_REMOTE:=hf://buckets/guntp/hersb}"
: "${HF_BUCKET_BACKUP_INTERVAL:=3600}"
# ---- 1. 注入 Telegram 反代 base_url(HF Spaces 无法直连 api.telegram.org)----
if [ -n "${TELEGRAM_API_BASE_URL:-}" ]; then
PYBIN=/opt/hermes/.venv/bin/python
[ -x "$PYBIN" ] || PYBIN=python3
HERMES_HOME="$HERMES_HOME" TELEGRAM_API_BASE_URL="$TELEGRAM_API_BASE_URL" \
TELEGRAM_API_FILE_BASE_URL="${TELEGRAM_API_FILE_BASE_URL:-}" \
"$PYBIN" - <<'PY' 2>&1 || echo "[hf-hermes] telegram base_url 注入失败,继续启动"
import os, yaml
p = os.path.join(os.environ["HERMES_HOME"], "config.yaml")
with open(p) as f:
cfg = yaml.safe_load(f) or {}
tg = cfg.setdefault("telegram", {})
extra = tg.setdefault("extra", {})
base = os.environ["TELEGRAM_API_BASE_URL"].rstrip("/")
extra["base_url"] = base
fbase = os.environ.get("TELEGRAM_API_FILE_BASE_URL", "").strip()
if not fbase:
fbase = base[:-4] + "/file/bot" if base.endswith("/bot") else base
extra["base_file_url"] = fbase
with open(p, "w") as f:
yaml.safe_dump(cfg, f, sort_keys=False, allow_unicode=True)
print(f"[hf-hermes] telegram base_url={base} base_file_url={fbase}")
PY
fi
# ---- 2. 修正数据目录属主 ----
chown -R "$HERMES_UID:$HERMES_GID" "$HERMES_HOME" 2>/dev/null || true
# ---- 3. 启动 HF Bucket 定时备份(后台循环)----
if [ -n "${HF_TOKEN:-}" ] && [ -x /usr/local/bin/hf ]; then
echo "[hf-hermes] 启动定时备份:先立即同步一次,再每 ${HF_BUCKET_BACKUP_INTERVAL}s -> ${HF_BUCKET_REMOTE}"
/opt/hermes-hf/hf-bucket-sync.sh || true
setsid sh -c "
while true; do
sleep ${HF_BUCKET_BACKUP_INTERVAL}
/opt/hermes-hf/hf-bucket-sync.sh || true
done
" >/dev/null 2>&1 &
fi