Skip to content

Instantly share code, notes, and snippets.

@lamberkeep
Last active September 1, 2025 10:49
Show Gist options
  • Save lamberkeep/3aa3d98ee8ef1dc9c878abd4746d1165 to your computer and use it in GitHub Desktop.
Save lamberkeep/3aa3d98ee8ef1dc9c878abd4746d1165 to your computer and use it in GitHub Desktop.
Minecraft server backup script.
#!/usr/bin/sh
# minecraft_server_backup.sh
# Minecraft server backup script.
# Before using this script, make sure that you install
# Minecraft server according to this guide:
# https://www.lessavin.ru/blog/minecraft-server.html
# Configuration.
# Minecraft server directory.
MINECRAFT_DIRECTORY="/srv/minecraft-server"
# Backup directory.
BACKUP_DIRECTORY="$HOME/Documents/archive"
# Backup filename date format.
# ISO 8601 by default.
DATE_FORMAT="%Y-%m-%d"
set -e
# Directory setup.
mkdir -p "$MINECRAFT_DIRECTORY" "$BACKUP_DIRECTORY"
# According to Minecraft Wikipedia:
# https://minecraft.wiki/w/Tutorial:Server_maintenance
# Save the world before closing server.
mcrcon save-all
# Close Minecraft server.
sudo systemctl stop minecraft-server
# Make sure that server is fully stopped.
until ! systemctl is-active --quiet minecraft-server
do
sleep 5
done
# Sometimes Minecraft server creates .dat files with wrong permissions.
# This line allows reading them.
sudo chmod 660 "$MINECRAFT_DIRECTORY/world/*.dat" \
"$MINECRAFT_DIRECTORY/world/*.dat_old" \
"$MINECRAFT_DIRECTORY/world/playerdata/*.dat" \
"$MINECRAFT_DIRECTORY/world/playerdata/*.dat_old"
backup="$BACKUP_DIRECTORY/minecraft-server_$(date +$DATE_FORMAT).tar"
# Creating archive in backup directory.
tar cfv "$backup" "$MINECRAFT_DIRECTORY"
# Now start the server.
sudo systemctl start minecraft-server
# Compress archive.
# lrzip is the best way to compress large-scale data.
lrzip --delete "$backup"
backup="$backup.lrz"
# Create archive checksum.
cd "$BACKUP_DIRECTORY"
sha256sum "$backup" > "$backup".sha256
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment