no message
This commit is contained in:
@@ -13,6 +13,30 @@
|
||||
|
||||
## 一、已完成事项
|
||||
|
||||
### 74. 赛事直播流定时抓取恢复与 Docker 调度优化
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-21
|
||||
|
||||
完成内容:
|
||||
- 排查赛事直播线路新增后长期停留在待抓取,确认 `la_dev_crontab` 中的 `crawler match_live_stream` 仅用于管理态记录;服务端 `php think crontab` 对已迁移的 crawler 任务会直接跳过,真实执行入口是测试服 `sport-era-crawler` 容器内由 `docker_task_runner.py` 渲染出的 `/etc/cron.d/sport-era-crawler`。
|
||||
- 确认测试服 `sport-era-crawler` 容器已连续运行 8 天且镜像未重建,旧容器内缺少 `/app/match_live_stream.py`,也没有渲染 `match_live_stream` 的 cron 任务,导致服务器目录虽然已同步源码,但新增线路不会被定时抓取。
|
||||
- 已在测试服重建并重启 `sport-era-crawler` 容器,确认容器内 `config/crawler_tasks.yaml` 与 `/etc/cron.d/sport-era-crawler` 都已包含 `match_live_stream` 每分钟调度。
|
||||
- 继续排查发现 `docker/crawler/scripts/docker_task_runner.py` 外层已对动作加锁,而 `docker/crawler/match_live_stream.py` 内部再次抢同名 `match_live_stream.lock`,任务会把自己判定成“已在执行中”并直接跳过,表现为 `la_crawler_task_log` 连续成功但 `la_match_live` 数据不更新。
|
||||
- 优化 `docker_task_runner.py` 在子进程执行时注入 `DQD_RUNNING_UNDER_TASK_RUNNER=1`,并让 `match_live_stream.py` 在该上下文下跳过内部同名锁,保留脚本独立执行时的文件锁能力,避免双重加锁导致的假成功。
|
||||
- 已补充 `match_live_stream` 回归测试,并在测试服手动触发一轮任务,确认 `la_match_live.play_url_m3u8` 成功写入,`fetch_status=1`,已抓到播放地址的线路会按 10 分钟规则刷新。
|
||||
|
||||
涉及模块:
|
||||
- `docker/crawler/match_live_stream.py`
|
||||
- `docker/crawler/scripts/docker_task_runner.py`
|
||||
- `docker/crawler/tests/test_match_live_stream.py`
|
||||
- `docs/sql/insert_crontab_match_live_stream.sql`
|
||||
|
||||
验证记录:
|
||||
- 已执行 `C:\Python311\python.exe -m unittest docker.crawler.tests.test_match_live_stream.MatchLiveStreamTest.test_run_does_not_skip_due_rows_when_invoked_by_docker_task_runner`,确认修复前红灯场景已被回归测试覆盖。
|
||||
- 已执行 `C:\Python311\python.exe -m unittest docker.crawler.tests.test_match_live_stream`,10 个直播流抓取单测通过。
|
||||
- 已在测试服执行 `sudo docker compose -f docker-compose.crawler.yml build crawler && sudo docker compose -f docker-compose.crawler.yml up -d --no-deps crawler`,确认新容器已加载 `match_live_stream.py` 与对应 cron。
|
||||
- 已在测试库补齐 `la_dev_crontab` 中的 `crawler / match_live_stream` 记录,并手动执行 `python /app/scripts/docker_task_runner.py run match_live_stream ...`,确认 `la_match_live` 的 `play_url_m3u8` 已成功落库。
|
||||
|
||||
### 73. 彩票帖子 AI 分析图片先本地化再识别
|
||||
|
||||
- 状态:已完成 - 时间:2026-06-13
|
||||
@@ -1499,3 +1523,8 @@
|
||||
- 注意:2026149-2026150 期因 API 格式变更期间不可回溯(API 只返回当前期),已无法补回。
|
||||
涉及模块:
|
||||
- `server/public/dongqiudi-crawler/lottery_community.py`
|
||||
|
||||
## 四、避坑记录
|
||||
|
||||
- **Docker crawler 新增任务后,不能只同步源码不重建容器**:像 `match_live_stream.py` 这类新增动作,即使服务器目录里已经有文件,运行中的 `sport-era-crawler` 仍可能还是旧镜像;要同时检查容器内 `/app/<task>.py`、`/app/config/crawler_tasks.yaml` 和 `/etc/cron.d/sport-era-crawler` 是否都已加载新任务,否则会出现“代码在服务器上、任务却永远不执行”的假象。
|
||||
- **Docker 外层 runner 与任务脚本内部不要重复抢同名锁**:`docker_task_runner.py` 已经按 action 加过锁,任务脚本内部如果再对同名 action 抢文件锁,会出现“任务日志连续成功、数据库完全没更新”的假成功症状;后续新增 Docker crawler 任务时,要先确认锁只保留一层,或显式区分 runner 锁和脚本独立执行锁。
|
||||
|
||||
Reference in New Issue
Block a user