fix: CTP 连接后 locale 崩溃,PM2 设置 LANG=C.UTF-8

vnpy_ctp C++ 扩展在缺 locale 时会 terminate;补充 SimNow 备用前置说明。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-24 11:32:20 +08:00
parent 350d0fed6b
commit f73d436077
7 changed files with 30 additions and 1 deletions
+5
View File
@@ -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
+3 -1
View File
@@ -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..."
+2
View File
@@ -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) |
| 已连接但下单拒单 | 检查合约代码、价格精度、是否有足够保证金 |
---
+10
View File
@@ -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」
+3
View File
@@ -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",
+3
View File
@@ -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)
+4
View File
@@ -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__)