#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" REMOTE_80_HOST="us-main-01-admin-direct" REMOTE_80_BACKUP_SCRIPT="/home/admin/docker-projects/sub2api/deploy/backup-complete.sh" REMOTE_80_VERIFY_SCRIPT="/home/admin/docker-projects/sub2api/deploy/verify-sub2api-backup.sh" LOCAL_80_BACKUP_SCRIPT="$ROOT_DIR/bin/backup-complete.sh" LOCAL_80_VERIFY_SCRIPT="$ROOT_DIR/bin/verify-sub2api-backup.sh" usage() { cat <<'EOF' 统一入口:./bin/run [args...] 可用命令: diagnose-check [host] 运行巡检 diagnose-disk-bark [host] [threshold] 磁盘 >= threshold 时发 Bark 告警 diagnose-fix 运行修复脚本 diagnose-exporter-check 检查 exporter 资源 backup-local [backup_parent] 备份本地 progress/redis 相关文件 backup-local-verify [mode] 校验本地文件级备份 backup-80 SSH 到 80 执行真实备份 backup-80-verify [dir] [redis_image] SSH 到 80 执行真实恢复验证 backup-80-source 显示本地 80 备份脚本路径 backup-80-verify-source 显示本地 80 恢复验证脚本路径 deploy-monitoring-center 监控中心部署脚本 deploy-monitoring-center-local 本地监控中心部署脚本 deploy-exporter exporter 部署脚本 deploy-node-exporter node exporter 部署脚本 deploy-clean-japan 日本节点磁盘清理脚本 clean-docker-anon-volumes [--execute] 安全清理 Docker 匿名悬空 volume(默认 dry-run) deploy-disk-alert-systemd 安装磁盘 Bark 告警 systemd timer daily-brief 日报模块目录提示 tree 打印仓库结构 help 显示帮助 EOF } cmd="${1:-help}" shift || true case "$cmd" in diagnose-check) exec "$ROOT_DIR/diagnose/check.sh" "$@" ;; diagnose-disk-bark) exec "$ROOT_DIR/diagnose/check-disk-bark.sh" "$@" ;; diagnose-fix) exec "$ROOT_DIR/diagnose/fix.sh" "$@" ;; diagnose-exporter-check) exec "$ROOT_DIR/diagnose/check-exporter-resources.sh" "$@" ;; backup-local) exec "$ROOT_DIR/backup/local/backup-progress-and-redis.sh" "$@" ;; backup-local-verify) exec "$ROOT_DIR/backup/local/verify-progress-and-redis-backup.sh" "$@" ;; backup-80) exec ssh "$REMOTE_80_HOST" "bash '$REMOTE_80_BACKUP_SCRIPT'" ;; backup-80-verify) backup_dir="${1:-}" redis_image="${2:-redis:8-alpine}" if [ -z "$backup_dir" ]; then backup_dir="$(ssh "$REMOTE_80_HOST" "ls -dt /home/admin/backups/sub2api/backup-date-* 2>/dev/null | head -n 1")" fi if [ -z "$backup_dir" ]; then echo "未找到 80 上的备份目录" >&2 exit 1 fi exec ssh "$REMOTE_80_HOST" "bash '$REMOTE_80_VERIFY_SCRIPT' '$backup_dir' '$redis_image'" ;; backup-80-source) echo "$LOCAL_80_BACKUP_SCRIPT" ;; backup-80-verify-source) echo "$LOCAL_80_VERIFY_SCRIPT" ;; deploy-monitoring-center) exec "$ROOT_DIR/deploy/monitoring-center/deploy-monitoring-center.sh" "$@" ;; deploy-monitoring-center-local) exec "$ROOT_DIR/deploy/monitoring-center/deploy-monitoring-center-local.sh" "$@" ;; deploy-exporter) exec "$ROOT_DIR/deploy/exporter/deploy-exporter.sh" "$@" ;; deploy-node-exporter) exec "$ROOT_DIR/deploy/exporter/deploy-node-exporter.sh" "$@" ;; deploy-clean-japan) exec "$ROOT_DIR/deploy/cleanup/clean-disk-japan.sh" "$@" ;; clean-docker-anon-volumes) exec "$ROOT_DIR/deploy/cleanup/clean-docker-anonymous-volumes.sh" "$@" ;; deploy-disk-alert-systemd) exec "$ROOT_DIR/deploy/systemd/install-disk-alert-systemd.sh" "$@" ;; daily-brief) echo "$ROOT_DIR/daily-brief" ;; tree) find "$ROOT_DIR" -maxdepth 2 \( -type d -o -type f \) | sed "s#^$ROOT_DIR#.#" | sort ;; help|-h|--help) usage ;; *) echo "未知命令: $cmd" >&2 echo >&2 usage >&2 exit 1 ;; esac