#!/usr/bin/env bash set -euo pipefail ENV_FILE="${1:-/etc/default/domaincheck-api}" WORKER_SERVICE="${WORKER_SERVICE:-domaincheck-worker}" API_SERVICE="${API_SERVICE:-domaincheck-api}" SYNC_AGENT_SERVICE="${SYNC_AGENT_SERVICE:-domaincheck-sync-agent}" PYTHON_BIN="${PYTHON_BIN:-python3}" echo "[1/5] environment file" if [ ! -f "$ENV_FILE" ]; then echo "missing env file: $ENV_FILE" exit 1 fi echo "env file: $ENV_FILE" echo echo "[2/5] key env summary" "${PYTHON_BIN}" - <<'PY' "$ENV_FILE" import json import sys from pathlib import Path env_path = Path(sys.argv[1]) values = {} for line in env_path.read_text(encoding="utf-8").splitlines(): text = line.strip() if not text or text.startswith("#") or "=" not in text: continue key, value = text.split("=", 1) values[key.strip()] = value.strip() required = { "NODE_CODE": values.get("NODE_CODE", ""), "NODE_REGION": values.get("NODE_REGION", ""), "NODE_ROLE": values.get("NODE_ROLE", ""), "SYNC_PUSH_ENABLED": values.get("SYNC_PUSH_ENABLED", ""), "SYNC_SOURCE_REGION": values.get("SYNC_SOURCE_REGION", ""), "SYNC_TARGET_REGION": values.get("SYNC_TARGET_REGION", ""), "SYNC_TARGET_API_BASE_URL": values.get("SYNC_TARGET_API_BASE_URL", ""), } print(json.dumps(required, ensure_ascii=False, indent=2)) errors = [] if required["NODE_REGION"] != "mainland": errors.append("NODE_REGION 必须为 mainland") if required["NODE_ROLE"] != "control": errors.append("NODE_ROLE 必须为 control") if str(required["SYNC_PUSH_ENABLED"]).lower() != "true": errors.append("SYNC_PUSH_ENABLED 必须为 true") if required["SYNC_SOURCE_REGION"] != "mainland": errors.append("SYNC_SOURCE_REGION 必须为 mainland") if not required["SYNC_TARGET_API_BASE_URL"]: errors.append("必须配置 SYNC_TARGET_API_BASE_URL") if errors: print() print("env validation failed:") for item in errors: print(f"- {item}") sys.exit(1) PY echo echo "[3/6] systemd status" systemctl is-enabled "$API_SERVICE" || true systemctl is-active "$API_SERVICE" systemctl is-enabled "$WORKER_SERVICE" || true systemctl is-active "$WORKER_SERVICE" systemctl is-enabled "$SYNC_AGENT_SERVICE" || true systemctl is-active "$SYNC_AGENT_SERVICE" echo echo "[4/6] api service detail" systemctl status "$API_SERVICE" --no-pager -l | sed -n '1,25p' echo echo "[5/6] worker service detail" systemctl status "$WORKER_SERVICE" --no-pager -l | sed -n '1,25p' echo echo "[6/6] sync-agent detail" systemctl status "$SYNC_AGENT_SERVICE" --no-pager -l | sed -n '1,25p'