Files
market_sync/docs/works/2026-07-03-02-morning-no-trigger.md
gao d140fee9e7 fix: 早盘前 09:00 stock_basic + industry_sector 没触发
work #02 (2026-07-03):daily_check 复跑仍 10 missed,细看时间窗口发现
新问题——09:00 / 09:30 该跑的 2 个早盘前 task today 没触发。

根因:worker.py 进程内 scheduler 是预期的主调度(含 09:00 / 09:30),
但 worker.py 没人拉起;systemd timers 又只覆盖 15:30 / 21:xx,缺早盘档。
昨 18h 删 monitor 同时没补 worker.py → 早盘缺口暴露。

变更:
- bin/market_sync_morning_run.sh: 轻量 morning wrapper,只跑 stock_basic
  + industry_sector 串行(~25min),不复用 runall_once.py 的 8 task
- bin/systemd/market-sync-morning.{service,timer}: Mon..Fri 09:00 daily
  触发,TimeoutStartSec=3600 (1h)
- docs/works/2026-07-03-02-morning-no-trigger.md: 完整 work 记录

不在本 work 范围(更大重构):把 worker.py 拉起作为 long-running,
与 systemd timer 收敛到单一调度器——见 dual-scheduler-overlap memory。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-03 10:50:25 +08:00

2.7 KiB
Raw Permalink Blame History

2026-07-03 — work #02: 早盘前 09:00 / 09:30 同步没触发

发现

work #01 commit 2951770 后 18 分钟重跑 daily_check → 10 个 missed 状态没变(符合预期,因为 15:30 / 21:xx 还没到时间)。

但细看时间窗口发现新问题

  • 当前时间 10:4909:00 / 09:30 应已跑完 stock_basic + industry_sector
  • 两个 task last_success 还是 2026-07-02 → 今天根本没触发

根因

调度链路里没有早盘触发器:

调度器 时间点 早盘?
systemd timers 15:30 / 21:05 / 21:35 / 22:00 / Sat 11:30 / 23:00
worker.py 进程内 scheduler 09:00 / 09:30 / 15:30 / ... 有,但 worker.py 没运行

app/entrypoints/worker.py:57start_scheduler() 是预期的主调度器,但没人把 worker.py 作为 long-running 进程拉起:

  • 之前应该是 monitor 守护的"逻辑分层"是:worker.py 长驻 + systemd timer 兜底
  • 昨 18h 删了 monitor,没补 worker.py → 早盘缺口暴露

解决

bin/systemd/market-sync-morning.{service,timer} @ 周一~五 09:00 daily

  • service 跑轻量 morning shellbin/market_sync_morning_run.sh),只跑 stock_basic + industry_sector
  • 不复用 runall_once.py8 个 task 跑 80min 太长不适合早盘)
  • TimeoutStartSec=3600 (1h) 够用(实测 2 个 task 串行 ~25min

与现有架构的关系

时间点 systemd service 跑什么
09:00 market-sync-morning stock_basic + industry_sector
15:30 market-sync (runall) 8 task 全量
21:05 market-sync-tick tick_trade
21:35 market-sync-moneyflow moneyflow
22:00 market-sync-lhb longhubang
23:00 market-sync-daily-check daily_check
Sat 11:30 market-sync-stock-node stock_node

注意:这次没启 worker.py。改 worker.py 长驻属于更大重构(与 systemd timer 收敛到一个调度器,见 dual-scheduler-overlap),不在本 work 范围。

关联

  • dual-scheduler-overlap: 早盘缺口正是该 memory 预测的"worker.py 没在跑时 systemd 冗余"问题
  • market-data-overview: 调度时间表(本 work 后补全了 09:00 缺口)
  • work #01: 2026-07-03-01-market-sync-timeout.md

验收

sudo cp bin/market_sync_morning_run.sh /usr/local/bin/  # 可选;或保持 repo 内
sudo cp bin/systemd/market-sync-morning.{service,timer} /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable market-sync-morning.timer
# 验证 timer 在 schedule 里
systemctl list-timers | grep market-sync-morning
# 手动触发一次,验证脚本可用
sudo systemctl start market-sync-morning.service
journalctl -u market-sync-morning -f