-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsyncoid-run.sh
More file actions
executable file
·34 lines (29 loc) · 1.36 KB
/
syncoid-run.sh
File metadata and controls
executable file
·34 lines (29 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env bash
# ==============================================================================
# syncoid-run.sh — ZFS Replication to backup-tank
# Schedule: Cron at 04:15 AM (after Sanoid snapshots at 04:00 AM)
# ==============================================================================
set -euo pipefail
# Load .env for DISCORD_WEBHOOK_URL
ENV_FILE="/opt/.env"
if [[ -f "$ENV_FILE" ]]; then
set -a; source "$ENV_FILE"; set +a
fi
WEBHOOK_URL="${DISCORD_WEBHOOK_URL:?DISCORD_WEBHOOK_URL must be set in .env}"
LOG="/var/log/media-backup/syncoid.log"
FAILED=0
# --- 1. Replicate media-tank (Excluding Docker System Files) ---
echo "$(date '+%Y-%m-%d %H:%M:%S') — Starting media-tank replication" >> "$LOG"
if ! /usr/sbin/syncoid -r --exclude=media-tank/docker --no-sync-snap media-tank backup-tank/media-mirror >> "$LOG" 2>&1; then
FAILED=1
fi
# --- 2. Replicate music-tank ---
echo "$(date '+%Y-%m-%d %H:%M:%S') — Starting music-tank replication" >> "$LOG"
if ! /usr/sbin/syncoid -r --no-sync-snap music-tank backup-tank/music-mirror >> "$LOG" 2>&1; then
FAILED=1
fi
# --- Alert on failure ---
if [[ "$FAILED" -ne 0 ]]; then
JSON_PAYLOAD='{"content": "🚨 **URGENT:** Syncoid replication to `backup-tank` FAILED! Please check `/var/log/media-backup/syncoid.log` for details."}'
curl -s -H "Content-Type: application/json" -d "$JSON_PAYLOAD" "$WEBHOOK_URL"
fi