Add high-reliability 30s auto-sync configuration (Systemd Timer)

This commit is contained in:
2025-12-27 22:29:15 +11:00
parent f253b8678f
commit aebd9934e5
5 changed files with 211 additions and 80 deletions

66
auto-sync-robust.sh Normal file
View File

@@ -0,0 +1,66 @@
#!/bin/bash
# Configuration
APP_NAME="web-page-performance-test"
APP_DIR="/var/www/$APP_NAME"
LOG_FILE="/var/log/$APP_NAME-autosync.log"
LOCK_FILE="/var/lock/$APP_NAME-sync.lock"
# Singleton execution with flock
exec 9>"$LOCK_FILE"
if ! flock -n 9; then
# Lock is busy, skip this run (logging optional to avoid spam)
exit 0
fi
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
# Ensure we are in the correct directory
cd "$APP_DIR" || { log "❌ Error: Could not change to $APP_DIR"; exit 1; }
# Fetch remote updates
if ! git fetch origin main --quiet; then
log "❌ Error: Git fetch failed"
exit 1
fi
LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse origin/main)
if [ "$LOCAL" = "$REMOTE" ]; then
# No changes, exit silently
exit 0
fi
log "🔄 Changes detected! Local: ${LOCAL:0:7} -> Remote: ${REMOTE:0:7}"
# Pull changes
if ! git pull origin main; then
log "❌ Error: Git pull failed"
exit 1
fi
# Check for dependency changes
RESTART_NEEDED=false
if git diff --name-only "$LOCAL" "$REMOTE" | grep -q "package.json"; then
log "📦 package.json changed. Running npm install..."
if npm install --production; then
RESTART_NEEDED=true
else
log "❌ Error: npm install failed"
fi
else
RESTART_NEEDED=true
fi
# Restart service if needed
if [ "$RESTART_NEEDED" = true ]; then
log "🔄 Restarting service..."
if systemctl restart "$APP_NAME"; then
log "✅ Service restarted successfully"
else
log "❌ Error: Failed to restart service"
fi
fi