76 lines
2.8 KiB
Bash
76 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
||
# 一键用 screen 后台启动中控 hub.py(默认对接 3 个 agent:不含 OKX)
|
||
# 用法:先启动 3 个 agent(start_agents_3screen.sh),再执行本脚本
|
||
# bash /path/to/manual_trading_hub/scripts/start_hub_screen.sh
|
||
# 可在运行前 export 覆盖:HUB_AGENTS、HUB_AGENT_NAMES、HUB_HOST、HUB_PORT、CONTROL_TOKEN、HUB_TRUST_LAN
|
||
# 默认 HUB_HOST=0.0.0.0、HUB_TRUST_LAN=1(局域网可访问私网 IP)。仅本机: export HUB_HOST=127.0.0.1 HUB_TRUST_LAN=0
|
||
# 查看:screen -ls 接入:screen -r mt-hub 停:./stop_hub_screen.sh
|
||
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
HUB_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||
VENV_PY="${HUB_DIR}/.venv/bin/python"
|
||
HUB_PY="${HUB_DIR}/hub.py"
|
||
|
||
HUB_AGENTS="${HUB_AGENTS:-http://127.0.0.1:15200,http://127.0.0.1:15202,http://127.0.0.1:15203}"
|
||
# 不设 HUB_AGENT_NAMES 时不在此写死,由 hub.py 里 _DEFAULT_FOLDER_LABELS 生效;要覆盖可: export HUB_AGENT_NAMES="名1,名2,名3" 或写在 manual_trading_hub/.env
|
||
HUB_AGENT_NAMES="${HUB_AGENT_NAMES:-}"
|
||
HUB_HOST="${HUB_HOST:-0.0.0.0}"
|
||
HUB_PORT="${HUB_PORT:-5100}"
|
||
HUB_TRUST_LAN="${HUB_TRUST_LAN:-1}"
|
||
|
||
if ! command -v screen >/dev/null 2>&1; then
|
||
echo "未找到 screen,请先安装:sudo apt install screen" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [[ ! -f "${VENV_PY}" ]]; then
|
||
echo "未找到 ${VENV_PY},请先在 manual_trading_hub 下创建 venv 并 pip install -r requirements.txt" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if [[ ! -f "${HUB_PY}" ]]; then
|
||
echo "未找到 hub.py:${HUB_PY}" >&2
|
||
exit 1
|
||
fi
|
||
|
||
if screen -ls 2>/dev/null | grep -qF ".mt-hub"; then
|
||
echo "已存在会话 mt-hub,跳过。要重建请先: screen -S mt-hub -X quit" >&2
|
||
exit 0
|
||
fi
|
||
|
||
# 仅当外层显式设置了 HUB_AGENT_NAMES 时才 export,避免 export 空串覆盖 .env 里已有配置
|
||
EXTRA_NAMES=""
|
||
if [[ -n "${HUB_AGENT_NAMES:-}" ]]; then
|
||
EXTRA_NAMES="export HUB_AGENT_NAMES=$(printf '%q' "${HUB_AGENT_NAMES}")"
|
||
fi
|
||
|
||
screen -dmS mt-hub bash -c "
|
||
set -e
|
||
cd '${HUB_DIR}'
|
||
set -a
|
||
if [[ -f .env ]]; then
|
||
. ./.env
|
||
fi
|
||
set +a
|
||
export HUB_AGENTS='${HUB_AGENTS}'
|
||
${EXTRA_NAMES}
|
||
export HUB_HOST='${HUB_HOST}'
|
||
export HUB_PORT='${HUB_PORT}'
|
||
export HUB_TRUST_LAN='${HUB_TRUST_LAN}'
|
||
exec '${VENV_PY}' '${HUB_PY}'
|
||
"
|
||
|
||
echo "已启动 screen:mt-hub"
|
||
echo " HUB_AGENTS=${HUB_AGENTS}"
|
||
if [[ -n "${HUB_AGENT_NAMES}" ]]; then
|
||
echo " HUB_AGENT_NAMES=${HUB_AGENT_NAMES}"
|
||
else
|
||
echo " HUB_AGENT_NAMES=(未设,使用 hub.py 内 _DEFAULT_FOLDER_LABELS)"
|
||
fi
|
||
echo " 监听:${HUB_HOST}:${HUB_PORT} HUB_TRUST_LAN=${HUB_TRUST_LAN}(默认允许私网访问中控)"
|
||
echo " 本机:http://127.0.0.1:${HUB_PORT}/ 局域网:http://<本机局域网IP>:${HUB_PORT}/"
|
||
echo " 仅本机请: export HUB_HOST=127.0.0.1 HUB_TRUST_LAN=0 后重启本脚本"
|
||
echo "接入: screen -r mt-hub"
|