Files
crypto_monitor/manual_trading_hub/scripts/start_agents_3screen.sh
T
2026-05-16 23:39:37 +08:00

82 lines
3.1 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 后台启动 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_*_的目录
# 依赖:各策略目录已 cp .env.example .env 并配置;manual_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"