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

2.6 KiB
Raw Blame History

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 数

使用

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 才算稳定达成