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:
@@ -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.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 才算稳定达成
|
||||
Reference in New Issue
Block a user