diff --git a/app.py b/app.py index e45b937..6c43cb7 100644 --- a/app.py +++ b/app.py @@ -1,4 +1,9 @@ import os + +# vnpy_ctp C++ 扩展需要有效 locale,否则 CTP 登录后可能崩溃 +os.environ.setdefault("LANG", "C.UTF-8") +os.environ.setdefault("LC_ALL", "C.UTF-8") + import sqlite3 import time import threading diff --git a/deploy.sh b/deploy.sh index 2d9cf6a..fa39e45 100644 --- a/deploy.sh +++ b/deploy.sh @@ -28,7 +28,9 @@ need_install git git # vnpy_ctp 在 Linux 上需本地编译(Meson + pkg-config 查找 python3-dev) echo "==> 安装 vnpy_ctp 编译依赖..." -apt-get install -y build-essential python3-dev pkg-config +apt-get install -y build-essential python3-dev pkg-config locales +locale-gen en_US.UTF-8 2>/dev/null || true +update-locale LANG=C.UTF-8 LC_ALL=C.UTF-8 2>/dev/null || true if ! command -v pm2 &>/dev/null; then echo "==> 安装 PM2..." diff --git a/docs/DEPLOY.md b/docs/DEPLOY.md index d225b59..34a61de 100644 --- a/docs/DEPLOY.md +++ b/docs/DEPLOY.md @@ -346,6 +346,8 @@ pm2 restart qihuo |-----------|------| | `pip install vnpy_ctp` 编译失败 / `Python dependency not found` | 安装 `build-essential python3-dev pkg-config` 后重试 | | CTP 连接超时 | 检查前置 IP、端口、SimNow 是否维护、是否在允许连接时段 | +| 连接后立即崩溃 `locale::facet::_S_create_c_locale` | 系统 locale 未配置;`export LANG=C.UTF-8 LC_ALL=C.UTF-8` 后 `pm2 restart qihuo`,或 `git pull` 使用最新 `ecosystem.config.cjs` | +| 服务器 `180.168.146.187` 超时 | 换 SimNow 备用前置 `182.254.243.31:30001/30011`(见 [SIMNOW.md](./SIMNOW.md)) | | 已连接但下单拒单 | 检查合约代码、价格精度、是否有足够保证金 | --- diff --git a/docs/SIMNOW.md b/docs/SIMNOW.md index e7a19ad..1e09944 100644 --- a/docs/SIMNOW.md +++ b/docs/SIMNOW.md @@ -139,6 +139,15 @@ tcp://IP:端口 pm2 restart qihuo ``` +**云服务器若 `180.168.146.187` 端口超时**,可改用备用前置(交易时段): + +```env +SIMNOW_TD_ADDRESS=tcp://182.254.243.31:30001 +SIMNOW_MD_ADDRESS=tcp://182.254.243.31:30011 +``` + +服务器上用 `nc -zv 182.254.243.31 30001` 验证连通后再配置。 + ### 3. 网页端连接 CTP 1. 登录本系统 @@ -174,6 +183,7 @@ python scripts/test_simnow.py | 报错 **4097** / 握手失败 | `pip install -U vnpy vnpy_ctp`,`.env` 设 `SIMNOW_ENV=实盘` | | **不合法的登录** | 投资者代码/密码错,或未在快期改过一次密码 | | 快期能登、脚本不能 | 多为网络或前置地址,换 SimNow 官网其他组前置试 | +| 连上后进程崩溃 `locale::facet::_S_create_c_locale` | 执行 `export LANG=C.UTF-8 LC_ALL=C.UTF-8`,`pm2 restart qihuo --update-env` | ### 提示「未安装 vnpy / vnpy_ctp」 diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs index 8f26aeb..e2f23f4 100644 --- a/ecosystem.config.cjs +++ b/ecosystem.config.cjs @@ -11,6 +11,9 @@ module.exports = { max_memory_restart: "300M", env: { NODE_ENV: "production", + LANG: "C.UTF-8", + LC_ALL: "C.UTF-8", + LC_CTYPE: "C.UTF-8", }, error_file: "/opt/qihuo/logs/pm2-error.log", out_file: "/opt/qihuo/logs/pm2-out.log", diff --git a/scripts/test_simnow.py b/scripts/test_simnow.py index 0f1669e..1acf851 100644 --- a/scripts/test_simnow.py +++ b/scripts/test_simnow.py @@ -6,6 +6,9 @@ import os import socket import sys +os.environ.setdefault("LANG", "C.UTF-8") +os.environ.setdefault("LC_ALL", "C.UTF-8") + BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, BASE) diff --git a/vnpy_bridge.py b/vnpy_bridge.py index 6aaea94..1ff2c6a 100644 --- a/vnpy_bridge.py +++ b/vnpy_bridge.py @@ -7,6 +7,10 @@ import threading import time from typing import Any, Optional +# vnpy_ctp C++ 在部分 Linux 上缺 locale 会抛 std::runtime_error +os.environ.setdefault("LANG", "C.UTF-8") +os.environ.setdefault("LC_ALL", "C.UTF-8") + from ctp_symbol import ths_to_vnpy_symbol, to_vnpy_exchange logger = logging.getLogger(__name__)