fix(nas): 固化容器 --init 铁律(防后台回测被清复发)
- docker-compose.yml vnpy 服务加 init:true(供未来 compose 部署) - three-env-code-promote.md 新增 §9:NAS 容器必须 --init 创建, 手动重建命令+image(pre-init-rebuild勿用with-sqlite)+复发风险(手动rm+run) 根因:无init时docker exec nohup后台进程会话结束后被清(02 day0 4min被清) ci-cd只restart不重建,--init保留;唯一丢--init路径=手动rm+run
This commit is contained in:
@@ -134,3 +134,31 @@ bash scripts/nas_sync/promote.sh --module sanguo_portfolio
|
||||
| scp 某模块卡住 >60s | Ctrl-C 记录,先验证已通的模块,单独重推失败的 |
|
||||
| 部署后 VPS 行为没变 | 代码是下次启动才加载;采集 schtask 需 `/end && /run` 立即生效 |
|
||||
| macOS bash 3.2 空数组报错 | 脚本已用 `${#arr[@]} -gt 0` 守卫;如改脚本注意 `set -u` + 空数组 |
|
||||
|
||||
## 9. NAS 容器 --init 铁律(防后台回测被清)
|
||||
|
||||
NAS test 容器 `sanguo_vnpy_v2` **必须 `docker run --init` 创建**(tini 作 PID1)。
|
||||
|
||||
**根因**:无 `--init` 时 PID1=uvicorn(非 init/tini)。`docker exec ... nohup python &` 启动的后台回测进程,在 docker exec 会话(bash)结束后成孤儿,docker 清理该后台进程组 → **长任务读盘中途被清**(02 small_cap day0 选股 5128 只 fundamentals 需 ~4min 超会话存活被清,log 停 day0 无 error;03 纯量价 day0 秒级没被清)。一度误判 OOM,被 `dmesg` 空 + 前台跑过 day0 推翻。
|
||||
|
||||
**何时会丢 --init(复发风险)**:
|
||||
- ci-cd `nas-deploy` 只 `docker restart`(**不重建,--init 保留** ✅)。
|
||||
- ⚠️ **任何手动 `docker stop && rm && run` 必须带 `--init`** —— 这是唯一丢 --init 的路径。
|
||||
|
||||
**手动重建命令要点**:
|
||||
```bash
|
||||
D=/var/packages/Docker/target/usr/bin/docker # Synology docker 不在 PATH
|
||||
# 1. 先 commit 当前容器(备份 + 含运行时手动装的 pip 包如 jwt)
|
||||
$D commit sanguo_vnpy_v2 sanguo_vnpy_v2:pre-init-rebuild
|
||||
# 2. stop && rm
|
||||
$D stop sanguo_vnpy_v2 && $D rm sanguo_vnpy_v2
|
||||
# 3. run --init 原参数(挂载/端口/env/network 原样保留)
|
||||
$D run -d --init --name sanguo_vnpy_v2 \
|
||||
-v /volume1/homes/admin/.sanguo_projects/sanguo_vnpy_v2:/app \
|
||||
-v /volume1/stock:/volume1/stock -p 8000:8000 \
|
||||
--restart unless-stopped sanguo_vnpy_v2:pre-init-rebuild
|
||||
```
|
||||
- ⚠️ **启动 image 用 `pre-init-rebuild`**(含 jwt 等运行时包)。**勿用 base `with-sqlite`** —— 缺 jwt,web 起 `ModuleNotFoundError`。(Dockerfile.nas 零 pip install,依赖全靠 base,故 jwt 只在 commit 层,重建从 base 会丢。)
|
||||
- 验证:`$D inspect sanguo_vnpy_v2 --format '{{.HostConfig.Init}}'` = `true`;`ps -o comm -p $(...PID)` = `docker-init`(tini)。
|
||||
|
||||
**正式 nas-verify(重建后必跑,同 ci-cd 口径)**:login(token 字段) + `/api/v1/strategy/list` 200 非空 + dbbardata 600519 SSE >0。
|
||||
|
||||
Reference in New Issue
Block a user