#!/bin/zsh # 观澜 · 如东样板 v2 (独立副本) 一条命令起服务. 端口段与 wind-analytics 离线版 (18084/8033/8020/8791/8792/54292) 完全错开; 全部只绑 127.0.0.1. # 共用的只读外部工具: Python 环境 ($PY, 可换成本仓自己的 venv) 与本机 Ollama 11434. R=${GUANLAN_V2_ROOT:-/Users/yuanying/guanlan-rudong-v2}; PY=${GUANLAN_V2_PY:-/Users/yuanying/wind-analytics/.venv/bin/python}; LOG=$R/outputs/rudong/windscada/_demo; mkdir -p $LOG export GUANLAN_RELEASE_DIR=$R/release GUANLAN_PORTAL=$R/release/portal.html WINDSCADA_ROOT=$R WINDCMS_ROOT=$R up(){ lsof -nP -iTCP:$1 -sTCP:LISTEN >/dev/null 2>&1; } start(){ local port=$1; shift; if up $port; then echo " $port 已在运行 (复用)"; else echo " $port 启动: $*"; (cd $R && nohup "$@" > $LOG/serve$port.log 2>&1 &); fi } start 18033 $PY scripts/windscada_serve.py --host 127.0.0.1 --port 18033 start 18020 $PY scripts/windcms.py serve --farm rudong --port 18020 start 64292 python3 -m http.server 64292 --bind 127.0.0.1 --directory "$R/release/viewer" start 18792 python3 -u "$R/release/sim_sys_server.py" start 18791 python3 -m http.server 18791 --bind 127.0.0.1 --directory "$R/resources/oem_envision_sc1_rudong2014" sleep 2 if up 28084; then echo " 28084 已在运行 (复用)"; else (cd $R && nohup $PY scripts/guanlan_gateway.py --host 127.0.0.1 --port 28084 > $LOG/gateway28084.log 2>&1 &); sleep 2; fi echo "== 入口 http://127.0.0.1:28084/"; curl -s -m 20 http://127.0.0.1:28084/healthz | $PY -c "import sys,json; d=json.load(sys.stdin); print(' status', d['status'], d['mode']); [print(' ', m['path'], m['name'], m.get('upstream_port'), 'ok' if m['ok'] else 'DOWN') for m in d['modules']]"