# 2026-07-03 — work #02: 早盘前 09:00 / 09:30 同步没触发 ## 发现 work #01 commit `2951770` 后 18 分钟重跑 daily_check → 10 个 missed 状态没变(符合预期,因为 15:30 / 21:xx 还没到时间)。 但细看时间窗口发现**新问题**: - 当前时间 10:49,09: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:57` 的 `start_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 shell(`bin/market_sync_morning_run.sh`),只跑 stock_basic + industry_sector - 不复用 runall_once.py(8 个 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 ## 验收 ```bash 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 ```