| #!/bin/bash |
| |
| 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" |
|
|
| |
| if [ ! -d "$WORLD_DIR" ] || [ -z "$(ls -A "$WORLD_DIR" 2>/dev/null)" ]; then |
| log "No world data found yet — skipping." |
| exit 0 |
| fi |
|
|
| |
| 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)" |
|
|
| |
| 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 |
|
|
| |
| 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 |
|
|