#!/usr/bin/env bash # 在 **moicen** 上、于 huike-back 根执行:检查 htyts 依赖与 HTTP 探活(不启动进程)。 # 用法: ./scripts/moicen_htyts_smoke.sh # 可选: MOICEN_HUIKE_ROOT=/path/to/huike-back set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" HUIKE="${MOICEN_HUIKE_ROOT:-$(cd "$SCRIPT_DIR/.." && pwd)}" ENV_FILE="$HUIKE/htyts/.env" if [ ! -f "$ENV_FILE" ]; then echo "缺少 $ENV_FILE" >&2 echo "执行: cd \"$HUIKE\" && cp envs/moicen/htyts.env htyts/.env && 按实机编辑 TS_DATABASE_URL / JWT_KEY(须与 AuthCore/htyuc 一致)" >&2 exit 1 fi read_kv() { # 读取 KEY=value,忽略 # 行;value 可含 =,去掉首尾可选引号 local key="$1" local line line="$(grep -E "^[[:space:]]*${key}=" "$ENV_FILE" | tail -n1)" || true if [ -z "$line" ]; then echo "" return fi local v="${line#*=}" v="${v%$'\r'}" v="${v#\"}" v="${v%\"}" v="${v#\'}" v="${v%\'}" printf '%s' "$v" } TS_DB_URL="$(read_kv TS_DATABASE_URL)" if [ -z "$TS_DB_URL" ]; then TS_DB_URL="$(read_kv DATABASE_URL)" fi REDIS_HOST="$(read_kv REDIS_HOST)" REDIS_PORT="$(read_kv REDIS_PORT)" TS_PORT="$(read_kv TS_PORT)" [ -n "${REDIS_HOST:-}" ] || REDIS_HOST=127.0.0.1 [ -n "${REDIS_PORT:-}" ] || REDIS_PORT=6379 [ -n "${TS_PORT:-}" ] || TS_PORT=3003 echo "== Redis $REDIS_HOST:$REDIS_PORT ==" if ! command -v redis-cli >/dev/null 2>&1; then echo "未安装 redis-cli,跳过 Redis 检查" >&2 else redis-cli -h "$REDIS_HOST" -p "$REDIS_PORT" ping | grep -q PONG || { echo "Redis 无 PONG" >&2 exit 1 } echo "OK" fi echo "== PostgreSQL(TS_DATABASE_URL) ==" if [ -z "$TS_DB_URL" ]; then echo "未找到 TS_DATABASE_URL / DATABASE_URL" >&2 exit 1 fi if ! command -v psql >/dev/null 2>&1; then echo "未安装 psql,跳过 PG 检查" >&2 else psql "$TS_DB_URL" -v ON_ERROR_STOP=1 -c "select 1" >/dev/null psql "$TS_DB_URL" -v ON_ERROR_STOP=1 -c "select count(*) as dbtask_rows from dbtask" || { echo "dbtask 表不存在或不可读:在 htyts_models 目录对同一 DATABASE_URL 执行 diesel migration run" >&2 exit 1 } echo "OK(已连库且存在 dbtask)" fi echo "== 本机 htyts HTTP :$TS_PORT ==" if curl -sS --connect-timeout 2 "http://127.0.0.1:${TS_PORT}/api/v1/ts" | grep -q 'Task Server'; then echo "OK -=Task Server=-" else echo "未响应或进程未起。起服: cd \"$HUIKE\" && ./scripts/moicen_start_huiwings_stack.sh(需先有 htyts/.env;或单独 cd htyts && ./start.sh)" >&2 echo "排障: tail -n 80 \"$HUIKE/htyts/htyts.nohup.log\"" >&2 exit 1 fi echo "== 经域名(可选,需本机能解析 ts.moicen.com) ==" if curl -sS --connect-timeout 5 -o /dev/null -w '%{http_code}\n' "https://ts.moicen.com/api/v2/ts/" 2>/dev/null | grep -q '^200$'; then echo "OK https://ts.moicen.com/api/v2/ts/" else echo "跳过或失败(本机无公网 / 证书 / openresty 未 reload 时属正常)" fi echo "全部通过。"