# 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 每次都要: 1. 手动 `sudo cp` 每个 unit 2. 手动 `systemctl daemon-reload` 3. 手动 `systemctl enable` 新 timer 4. 手动 `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 数 **使用**: ```bash 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`。脚本就绪 ≠ 目标达成。 完成后还需: 1. 跑 daily_check 确认 drift=0 2. 等明天 15:30 跑一次完整 runall 3. 跑 1-2 天后 daily_check 报 overall=ok 才算稳定达成