2026-04-21 20:35:57 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
# Usage: ./backup.sh [label]
|
|
|
|
|
# Creates backups/world-YYYY-MM-DD-HHMM[-label].tar.gz
|
2026-04-21 20:37:26 +02:00
|
|
|
# If the container is running, flushes world via rcon and archives via
|
|
|
|
|
# docker exec. If not, archives data/world from the host directly.
|
2026-04-21 20:35:57 +02:00
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
|
|
|
|
|
|
LABEL="${1:-}"
|
|
|
|
|
STAMP="$(date +%Y-%m-%d-%H%M)"
|
|
|
|
|
SUFFIX="${LABEL:+-$LABEL}"
|
|
|
|
|
OUT="backups/world-${STAMP}${SUFFIX}.tar.gz"
|
|
|
|
|
|
|
|
|
|
mkdir -p backups
|
|
|
|
|
|
2026-04-21 20:37:26 +02:00
|
|
|
if docker ps --format '{{.Names}}' | grep -qx minecraft; then
|
|
|
|
|
echo "Server running — flushing world via rcon..."
|
|
|
|
|
docker exec minecraft rcon-cli save-off >/dev/null
|
|
|
|
|
docker exec minecraft rcon-cli save-all flush >/dev/null
|
|
|
|
|
trap 'docker exec minecraft rcon-cli save-on >/dev/null || true' EXIT
|
2026-04-21 20:36:27 +02:00
|
|
|
|
2026-04-21 20:37:26 +02:00
|
|
|
echo "Archiving /data/world -> ${OUT}"
|
|
|
|
|
docker exec minecraft tar -czf - -C /data world > "${OUT}"
|
|
|
|
|
else
|
|
|
|
|
echo "Server not running — archiving data/world from host."
|
|
|
|
|
tar -czf "${OUT}" -C data world
|
|
|
|
|
fi
|
2026-04-21 20:35:57 +02:00
|
|
|
|
|
|
|
|
echo "Done."
|
|
|
|
|
ls -lh "${OUT}"
|