Files
market_sync/docs/works/2026-07-03-05-systemd-deploy-script.md
T
gao 46ddf8e171 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>
2026-07-03 11:44:33 +08:00

76 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 才算稳定达成