增加中控

This commit is contained in:
dekun
2026-05-13 01:52:26 +08:00
parent 5900588718
commit c14c74cf14
13 changed files with 2063 additions and 0 deletions
@@ -0,0 +1,81 @@
#!/usr/bin/env bash
# 一键用 screen 后台启动 3 个子代理(不含 OKX):Binance:15200、Gate:15202、Gate-Bot:15203
# 用法:在任意目录执行 bash /path/to/manual_trading_hub/scripts/start_agents_3screen.sh
# 若 hub 单独在 /opt/manual_trading_hub,四个策略目录在别的路径,请先:
# export MANUAL_TRADING_REPO_ROOT=/path/to/含_crypto_monitor_*_的目录
# 依赖:各策略目录下存在 .envmanual_trading_hub/.venv 已 pip install -r requirements.txt
# 日志:manual_trading_hub/logs/<会话名>.log(若 screen 里进程秒退,tail 该文件排查)
# 查看:screen -ls 接入:screen -r mt-agent-bn 停:./stop_agents_3screen.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
HUB_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
if [[ -n "${MANUAL_TRADING_REPO_ROOT:-}" ]]; then
REPO_ROOT="$(cd "${MANUAL_TRADING_REPO_ROOT}" && pwd)"
else
REPO_ROOT="$(cd "${HUB_DIR}/.." && pwd)"
fi
AGENT_PY="${HUB_DIR}/agent.py"
VENV_PY="${HUB_DIR}/.venv/bin/python"
LOG_DIR="${HUB_DIR}/logs"
mkdir -p "${LOG_DIR}"
echo "REPO_ROOT=${REPO_ROOT} (其下应有 crypto_monitor_binance、crypto_monitor_gate 等目录)"
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 "${AGENT_PY}" ]]; then
echo "未找到 agent.py${AGENT_PY}" >&2
exit 1
fi
start_one() {
local name="$1" subdir="$2" exchange="$3" port="$4"
local work="${REPO_ROOT}/${subdir}"
local logf="${LOG_DIR}/${name}.log"
if [[ ! -d "${work}" ]]; then
echo "目录不存在,跳过:${work}" >&2
echo " 若项目在别处,请设置 export MANUAL_TRADING_REPO_ROOT=/正确上级目录 后重跑" >&2
return 1
fi
if screen -ls 2>/dev/null | grep -qF ".${name}"; then
echo "已存在会话 ${name},跳过。要重建请先: screen -S ${name} -X quit" >&2
return 0
fi
screen -dmS "${name}" bash -c "
cd '${work}' || { echo 'cd failed' >>'${logf}'; exit 1; }
set -a
if [[ -f .env ]]; then
. ./.env
fi
set +a
export EXCHANGE='${exchange}' PORT='${port}' HOST=127.0.0.1
exec '${VENV_PY}' '${AGENT_PY}' >>'${logf}' 2>&1
"
sleep 0.5
if screen -ls 2>/dev/null | grep -qF ".${name}"; then
echo "已启动 screen${name} (${subdir} EXCHANGE=${exchange} PORT=${port}) 日志:${logf}"
else
echo "错误:${name} 启动后立刻退出。请执行: tail -80 '${logf}'" >&2
fi
}
start_one "mt-agent-bn" "crypto_monitor_binance" "binance" "15200"
start_one "mt-agent-gate" "crypto_monitor_gate" "gate" "15202"
start_one "mt-agent-gatebot" "crypto_monitor_gate_bot" "gate" "15203"
echo ""
echo "下一步(一键中控 screen):"
echo " chmod +x ${SCRIPT_DIR}/start_hub_screen.sh && ${SCRIPT_DIR}/start_hub_screen.sh"
echo "或手动:cd ${HUB_DIR} && source .venv/bin/activate && export HUB_AGENTS=... && python hub.py"
echo ""
echo "查看会话: screen -ls"