server / backup.sh
pabla1322's picture
Upload 17 files
722781c verified
Raw
History Blame Contribute Delete
2.15 kB
#!/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