feat: bin/systemd_deploy.sh 一键部署脚本

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>
This commit is contained in:
gao
2026-07-03 11:44:33 +08:00
parent cf45f98a8a
commit 46ddf8e171
2 changed files with 261 additions and 0 deletions
@@ -0,0 +1,76 @@
# 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.mddrift 检测出来后,需要 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 才算稳定达成