46ddf8e171
work #05 (2026-07-03):Stop hook 反馈 work #04 结尾'目标达成'是错的 预测,不是现状。timer/service 没真的跑 = 数据没真的进 PG。 work #01-04 全是代码/配置改动,没可执行 deploy 路径;user 每次手动 cp + daemon-reload + enable 5 个 unit 是出错温床。 修复:写 bin/systemd_deploy.sh,必须 sudo 跑,幂等,显示 plan → 等 用户确认 → 执行(拷贝 + 删孤儿 + reload + enable 新 timer + 验证)。 下一步:user 跑 sudo bash bin/systemd_deploy.sh 真把 unit 部署到 /etc,daily_check drift 才能归零,sync 目标才进入可观察达成路径。 重要:脚本就绪 ≠ 目标达成;脚本是必要非充分条件。 Co-Authored-By: Claude <noreply@anthropic.com>
2.6 KiB
2.6 KiB
2026-07-03 — work #05: 一键部署脚本 bin/systemd_deploy.sh
触发
Stop hook 反馈(user 重申目标后):
"目标未达成。... 留给你做的运维"步骤未执行... 数据今天还是没同步进 PG"
我之前在 work #04 结尾说"最终目标就达成了"是错的预测,不是现状。timer/service 没真的跑 → 数据没真的进 PG。
根因
work #01 #02 #03 #04 全部是代码层 + 配置层改动,没有可执行的 deploy 路径。user 每次都要:
- 手动
sudo cp每个 unit - 手动
systemctl daemon-reload - 手动
systemctl enable新 timer - 手动
reset-failed
5 个 unit 的手动部署是出错温床(漏 enable、忘 reload、unit 漂移检测在部署后下次才会再跑)。
解决
写 bin/systemd_deploy.sh —— 一键脚本:
特性:
- 必须
sudo跑(写 /etc/systemd/system/ + daemon-reload) - 幂等:重复运行无副作用
- 显示 plan → 等用户确认 → 执行(不盲跑)
- 计算 drift 同 daily_check 逻辑(find + diff)
- 拷贝 / 删除孤儿 / daemon-reload / enable 新 timer 全在一个流程
- 执行完再跑一遍验证,告诉你 drift 数
使用:
sudo bash bin/systemd_deploy.sh
输出示例(当前 drift 状态):
============================================================
market_sync systemd deploy plan
============================================================
Repo units: 14 个
/etc units: 10 个
📋 将要拷贝 (5 个):
cp bin/systemd/market-sync.service → /etc/systemd/system/market-sync.service
cp bin/systemd/market-sync-daily-check.service → /etc/systemd/system/market-sync-daily-check.service
...
🔄 将要重启 service (1 个):
systemctl reset-failed market-sync.service
...
确认执行?[y/N] y
=== 执行 ===
'/home/gao/Development/quant_home/market_sync/bin/systemd/market-sync.service' -> '/etc/systemd/system/market-sync.service'
...
=== 验证 ===
✅ 所有 unit 已对齐,0 drift
关联
- work #01: 2026-07-03-01-market-sync-timeout.md(修了但没部署)
- work #02: 2026-07-03-02-morning-no-trigger.md(同上)
- work #04: 2026-07-03-04-systemd-drift-detection.md(drift 检测出来后,需要 deploy 工具闭环)
- dual-scheduler-overlap
重要说明
这个脚本不解决目标本身——还需要 user 真的去运行 sudo bash bin/systemd_deploy.sh。脚本就绪 ≠ 目标达成。
完成后还需:
- 跑 daily_check 确认 drift=0
- 等明天 15:30 跑一次完整 runall
- 跑 1-2 天后 daily_check 报 overall=ok 才算稳定达成