User insight: hardlink breakage only happens at deploy time (scp file replacement / git checkout-merge), so detection must be welded INTO the deploy pipeline, not left to daily audit. Three automatic layers, no reliance on discipline: 1. systemd path watcher (profile-scripts-sync.path): watches deploy/profile-scripts/ directory, auto-fires sync_profile_scripts.sh on any change. Verified: fires within 4s of file replacement, logs to gateway/logs/link_sync.log (runs as hmo user) 2. git hooks (.git/hooks/post-merge + post-checkout on 246 repo): auto re-link after git operations 3. Manual fallback: sync_profile_scripts.sh (now self-logging) dev-spec red line #6 updated: SSOT rule now documents the three layers and states breakage only happens at deploy time.
16 lines
706 B
Bash
16 lines
706 B
Bash
#!/bin/bash
|
|
# sync_profile_scripts.sh — 把 deploy/profile-scripts 全部硬链接到 profile scripts 目录
|
|
# 每次部署(scp/git)后必须跑:scp替换文件会破坏硬链接(inode变更),导致cron跑旧版本。
|
|
set -e
|
|
SRC="/home/hmo/MoFin/deploy/profile-scripts"
|
|
DST="/home/hmo/.hermes/profiles/position-analyst/scripts"
|
|
count=0
|
|
for f in "$SRC"/*.py; do
|
|
name=$(basename "$f")
|
|
ln -f "$f" "$DST/$name"
|
|
count=$((count+1))
|
|
done
|
|
ln -f "$SRC/sync_profile_scripts.sh" "$DST/sync_profile_scripts.sh" 2>/dev/null || true
|
|
echo "synced $count scripts (hardlink)"
|
|
mkdir -p /home/hmo/MoFin/gateway/logs
|
|
echo "$(date '+%F %T') synced $count scripts" >> /home/hmo/MoFin/gateway/logs/link_sync.log |