Files
crypto_monitor/manual_trading_hub/scripts/start_hub_screen.sh
T
2026-05-24 07:43:05 +08:00

76 lines
2.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 一键用 screen 后台启动中控 hub.py(默认对接 3 个 agent:不含 OKX
# 用法:先启动 3 个 agentstart_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}'
# shellcheck source=lib_load_dotenv.sh
source '${HUB_DIR}/scripts/lib_load_dotenv.sh'
if [[ -f .env ]]; then
load_dotenv_file .env
fi
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 "已启动 screenmt-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"