44 lines
1.2 KiB
Bash
44 lines
1.2 KiB
Bash
#!/bin/bash
|
|
# hermes-standby-sync.sh — Periodic S3 sync for warm standby
|
|
# Pulls latest state from S3 every 10 min to keep app1-bu fresh.
|
|
# Runs in parallel with the watchdog. If failover happens,
|
|
# the latest data is already local.
|
|
set -euo pipefail
|
|
|
|
ENDPOINT="https://s3.us-east-1.wasabisys.com"
|
|
BUCKET="hermes-vps-backups"
|
|
SRC_PREFIX="live"
|
|
HERMES_HOME="${HOME}/.hermes"
|
|
LOG="/var/log/hermes-standby-sync.log"
|
|
LIVE_HOST="152.53.192.33"
|
|
|
|
source /opt/awscli-venv/bin/activate
|
|
|
|
log() {
|
|
echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] $*" >> "${LOG}"
|
|
}
|
|
|
|
# Don't sync if live box is unreachable (failover in progress)
|
|
if ! ping -c 1 -W 2 "${LIVE_HOST}" >/dev/null 2>&1; then
|
|
log "Live box unreachable — skipping sync"
|
|
exit 0
|
|
fi
|
|
|
|
log "Syncing from s3://${BUCKET}/${SRC_PREFIX}/..."
|
|
aws s3 sync "s3://${BUCKET}/${SRC_PREFIX}/" "${HERMES_HOME}/" \
|
|
--endpoint-url "${ENDPOINT}" \
|
|
--exclude "audio_cache/*" \
|
|
--exclude "image_cache/*" \
|
|
--exclude "cache/*" \
|
|
--exclude "sandboxes/*" \
|
|
--exclude "kanban/*" \
|
|
--exclude "node/*" \
|
|
--exclude "bin/*" \
|
|
--exclude "logs/*" \
|
|
--exclude "*.lock" \
|
|
--exclude "state.db-shm" \
|
|
--exclude "state.db-wal" \
|
|
--no-progress 2>&1 >> "${LOG}"
|
|
|
|
log "Sync complete"
|