File size: 2,149 Bytes
722781c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash
# World backup — local snapshot + optional Google Drive upload
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/data/bedrock-server/backups"
WORLD_DIR="/data/bedrock-server/worlds"
LOG="/data/logs/backup.log"
MAX_LOCAL=10

log() { echo "$(date '+%Y-%m-%d %H:%M:%S') [BACKUP] $*" | tee -a "$LOG"; }

mkdir -p "$BACKUP_DIR"

# ── Check world exists ────────────────────────────────────────────────
if [ ! -d "$WORLD_DIR" ] || [ -z "$(ls -A "$WORLD_DIR" 2>/dev/null)" ]; then
    log "No world data found yet — skipping."
    exit 0
fi

# ── Local backup ──────────────────────────────────────────────────────
BACKUP_FILE="$BACKUP_DIR/world_$TIMESTAMP.tar.gz"
log "Creating local backup: $BACKUP_FILE"
tar -czf "$BACKUP_FILE" -C "$(dirname "$WORLD_DIR")" worlds/

if [ $? -ne 0 ]; then
    log "ERROR: Local backup failed!"
    exit 1
fi

SIZE=$(du -sh "$BACKUP_FILE" | cut -f1)
log "Local backup complete: world_$TIMESTAMP.tar.gz ($SIZE)"

# ── Prune old local backups (keep MAX_LOCAL) ──────────────────────────
COUNT=$(ls "$BACKUP_DIR"/world_*.tar.gz 2>/dev/null | wc -l)
if [ "$COUNT" -gt "$MAX_LOCAL" ]; then
    TO_DEL=$((COUNT - MAX_LOCAL))
    ls -t "$BACKUP_DIR"/world_*.tar.gz | tail -n "$TO_DEL" | xargs rm -f
    log "Pruned $TO_DEL old local backup(s). Keeping $MAX_LOCAL."
fi

# ── Google Drive upload (only if GDRIVE_SA_KEY secret is set) ─────────
if [ -n "$GDRIVE_SA_KEY" ]; then
    log "GDRIVE_SA_KEY found — uploading to Google Drive..."
    python3 /data/scripts/google_drive_backup.py "$BACKUP_FILE" >> "$LOG" 2>&1
    if [ $? -eq 0 ]; then
        log "Google Drive upload successful!"
    else
        log "WARNING: Google Drive upload failed (local backup is still safe)."
    fi
else
    log "GDRIVE_SA_KEY not set — skipping Google Drive upload."
    log "  To enable: follow setup steps in google_drive_backup.py"
fi