更新使用说明、部署文档与 README,反映已移除下单区、Web 登录与 PM2 验收流程;新增常见问题.md 整理部署排障。 Co-authored-by: Cursor <cursoragent@cursor.com>
9.3 KiB
Ubuntu 后台运行(中控 + 子代理)
推荐生产:用本目录
ecosystem.config.cjs+ PM2 一次启动 4 agent + hub,见 部署文档.md §五。
故障实录:常见问题.md
各 crypto_monitor_* 策略目录:首次 cp .env.example .env 并编辑;.env 不进 Git,git pull 不覆盖。升级前建议 cp .env .env.backup.$(date +%Y%m%d)。子代理启动前须 source 该目录 .env(见下文;PM2 经 run_agent.sh 会自动处理)。
前台跑 python agent.py / python hub.py 时,关掉终端进程会结束。要常驻后台,可用下面三种之一(推荐 systemd)。
一、tmux / screen(最简单,适合先试用)
仓库已提供 一键起 3 个 agent(不含 OKX) 的 screen 脚本(需可执行权限):
chmod +x manual_trading_hub/scripts/start_agents_3screen.sh
chmod +x manual_trading_hub/scripts/start_hub_screen.sh
chmod +x manual_trading_hub/scripts/stop_agents_3screen.sh
chmod +x manual_trading_hub/scripts/stop_hub_screen.sh
./manual_trading_hub/scripts/start_agents_3screen.sh
./manual_trading_hub/scripts/start_hub_screen.sh
# 关闭:
./manual_trading_hub/scripts/stop_hub_screen.sh
./manual_trading_hub/scripts/stop_agents_3screen.sh
脚本默认认为:manual_trading_hub 的上一级目录里并列放着三个 crypto_monitor_*。若你把 hub 单独放在 /opt/crypto_monitor/manual_trading_hub,而策略项目在例如 /opt/crypto_monitor/ 下的其他位置,请先执行
export MANUAL_TRADING_REPO_ROOT=/opt/crypto_monitor 再运行 start_agents_3screen.sh。
启动后若 screen -ls 里没有 mt-agent-*,看日志:tail -80 /opt/crypto_monitor/manual_trading_hub/logs/mt-agent-bn.log。
局域网内其他电脑访问中控
中控 默认 HUB_HOST=0.0.0.0、HUB_TRUST_LAN=开启,同一局域网内可用 http://<中控机局域网IP>:5100/monitor 打开(本机 http://127.0.0.1:5100/)。请确保防火墙放行端口,例如:sudo ufw allow 5100/tcp。
- 若
.env设置了HUB_PASSWORD,须先访问/login(用户名见HUB_USERNAME,默认admin)。 - 公网 建议只经 HTTPS 反代 访问,勿把 5100 直接暴露公网;详见 部署文档.md §八。
- 若 域名 HTTPS 能登录、内网 IP:5100 HTTP 不能,见 常见问题.md §2.1(Cookie Secure)。
若改为 仅本机 访问:HUB_HOST=127.0.0.1 或 HUB_TRUST_LAN=0,重启 hub。
也可把上述变量写进 manual_trading_hub/.env,再用 start_hub_screen.sh 启动。
以下为手工 tmux 示例:
# 新建会话,在里面照常启动 agent 或 hub,然后按键 Ctrl+B 再按 D 脱离
tmux new -s hub
cd /opt/crypto_monitor/manual_trading_hub && source .venv/bin/activate && python hub.py
# Ctrl+B, D
tmux new -s agent-bn
cd /opt/crypto_monitor/crypto_monitor_binance && set -a && source .env && set +a
export EXCHANGE=binance PORT=15200 HOST=127.0.0.1
source /opt/crypto_monitor/manual_trading_hub/.venv/bin/activate
python /opt/crypto_monitor/manual_trading_hub/agent.py
# Ctrl+B, D
重新连上:tmux attach -t hub
二、nohup(快速、无守护重启)
cd /opt/crypto_monitor/manual_trading_hub
source .venv/bin/activate
nohup python hub.py > /tmp/manual-hub.log 2>&1 &
子代理同理(每个账户一条):先 source 该策略目录的 .env(agent.py 不会自己读文件),再 nohup python …/agent.py。
停进程:ps aux | grep hub.py 或 grep agent.py,再 kill <pid>。
三、systemd(推荐:开机自启、崩溃自动拉起)
- 把下面两个示例里的
YOUR_REPO改成/opt/crypto_monitor(或你本机实际仓库根目录),YOUR_USER改成 Linux 用户名。 - 复制到
/etc/systemd/system/(需 sudo),文件名例如manual-hub.service、manual-agent-binance.service。 - 执行:
sudo systemctl daemon-reload
sudo systemctl enable --now manual-hub.service
sudo systemctl enable --now manual-agent-binance.service
# 其余 OKX / Gate 同理再建 3 个 unit 或合并为多条
查看状态:sudo systemctl status manual-hub
日志:journalctl -u manual-hub -f
示例:/etc/systemd/system/manual-hub.service
[Unit]
Description=手工交易中控 hub
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=YOUR_USER
WorkingDirectory=YOUR_REPO/manual_trading_hub
Environment=HUB_HOST=0.0.0.0
Environment=HUB_TRUST_LAN=1
Environment=HUB_PORT=5100
ExecStart=YOUR_REPO/manual_trading_hub/.venv/bin/python YOUR_REPO/manual_trading_hub/hub.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
注意: agent.py 不会像 Flask 那样自动加载目录里的 .env,密钥必须由 systemd 的 EnvironmentFile= 注入,或用下面 bash -c 方式 source .env 后再启动。
示例:/etc/systemd/system/manual-agent-binance.service
[Unit]
Description=手工交易子代理 Binance
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=YOUR_USER
WorkingDirectory=YOUR_REPO/crypto_monitor_binance
Environment=PATH=YOUR_REPO/manual_trading_hub/.venv/bin:/usr/bin:/bin
Environment=EXCHANGE=binance
Environment=PORT=15200
Environment=HOST=127.0.0.1
# 把该账户的 .env 注入进程(与 Flask 同一份即可;仅支持 KEY=VALUE 行,勿写 shell 语法)
EnvironmentFile=-YOUR_REPO/crypto_monitor_binance/.env
ExecStart=YOUR_REPO/manual_trading_hub/.venv/bin/python YOUR_REPO/manual_trading_hub/agent.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
若 .env 含 systemd 无法解析 的内容(复杂引号、export 等),改用:
ExecStart=/bin/bash -lc 'set -a; source YOUR_REPO/crypto_monitor_binance/.env; set +a; exec YOUR_REPO/manual_trading_hub/.venv/bin/python YOUR_REPO/manual_trading_hub/agent.py'
并删掉或注释掉 EnvironmentFile= 行,避免重复注入。
OKX / Gate / Gate-Bot:各复制一份 .service,改 Description、WorkingDirectory、以及 EXCHANGE / PORT(15201、15202、15203)。
四、常见问题(子代理 / screen / 依赖)
-
curl http://127.0.0.1:15202/status(或其它端口)返回ok:false,错误里提到 pysocks / SOCKS
策略目录.env里配置了GATE_SOCKS_PROXY(或BINANCE_SOCKS_PROXY、OKX_SOCKS_PROXY)时,ccxt 需要 PySocks。在/opt/crypto_monitor/manual_trading_hub/.venv(或你本机的manual_trading_hub/.venv)中执行:
pip install PySocks或pip install -r requirements.txt。 -
已经
pip install PySocks,错误文案完全不变
子代理是常驻进程,首次请求已创建 ccxt;在运行中的进程里仅安装包不会自动生效。须重启该 agent:例如
screen -S mt-agent-gate -X quit
再执行start_agents_3screen.sh(或你的等价启动方式)。不要依赖「会话还在、以为已经更新」的旧进程。 -
start_agents_3screen.sh打印「已存在会话、跳过」
脚本检测到mt-agent-*已在跑会跳过创建。需要先停再启:
./stop_agents_3screen.sh
或对单个会话:screen -S mt-agent-gate -X quit,再跑启动脚本。 -
确认 15200/15202/15203 上的进程用的是 hub 的 venv
ps aux | grep agent.py tr '\0' ' ' < /proc/<PID>/cmdline; echo应看到
…/manual_trading_hub/.venv/bin/python与…/manual_trading_hub/agent.py。若用的是系统python3,要么在同一解释器环境里装依赖,要么改为用start_agents_3screen.sh启动(脚本内写死VENV_PY)。 -
中控某账户一直红 / 非 JSON
对应该端口的 agent 未启动,或 系统设置 里 Agent URL 与PORT(15200~15203)不一致。本机先测:
curl -sS http://127.0.0.1:1520x/status | head -c 400
再看logs/mt-agent-*.log或pm2 logs manual-agent-*。 -
PM2 日志仍见
api_trade_key/ 添加关键位 SyntaxError
多为旧版 hub 或未重启。git pull→bash scripts/fix_hub_deps.sh→bash scripts/verify_hub_deploy.sh→pm2 restart manual-trading-hub。中控已移除下单区,关键位请在监控卡片 「实例」 进各 Flask 操作。详见 常见问题.md §1。 -
子代理端口与 Flask 冲突
agent 使用环境变量PORT(脚本里 15200、15202、15203);各策略.env里的APP_PORT给 Flask。二者不能相同。 -
systemd 下改依赖或
.env后
与 screen 相同:pip install或改EnvironmentFile后需systemctl restart <unit>,否则仍是旧进程。
五、注意
- 子代理与中控仍建议只监听 127.0.0.1;Flask 的
APP_HOST=0.0.0.0与中控无关。 - 若策略项目用自己的
.venv,把ExecStart里的 Python 改成该 venv 的python,但agent.py路径仍指向manual_trading_hub/agent.py。
同目录下另有 example-systemd/*.service.example 可复制后改路径使用。