82 lines
3.1 KiB
Bash
82 lines
3.1 KiB
Bash
#!/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_*_的目录
|
||
# 依赖:各策略目录下存在 .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"
|