Keith's picture

Linux Automated Minecraft Backup

No, I'm not a Minecraft player. I got into it for a little while during the Alpha, paid for the full client to support Mojang just because I thought the idea was fantastic and loved seeing what other people do. But I just couldn't stick with it. I do, however, have several friends that are fanatical fans of the game and some cycles on the home server to spare. So I offered to host a server for them so they could all play together instead of their own single player clients at home.

One shortcoming that I had for a while with the Linux version was a way to do automated backups. When running Minecraft from the command line in a screen session, there was no way to automatically shut the server down cleanly without possibly causing world corruption. I hadn't really been keeping up with the small updates in the backend coding, but apparently they finally added a "save-off" console command to the game to allow a clean backup of the world files while the game was still running. The next problem was figuring out how to send that to a screen session automatically.

Spent some time looking at the options in screen that I had never really had a need for previously so wasn't familiar with them. The following is an example of the script I whipped up that will perform a full backup of Minecraft running in screen window 3.

screen -p 3 -X stuff "say Backup starting. World no longer saving!... $(printf '\r')"
screen -p 3 -X stuff "save-off $(printf '\r')"
screen -p 3 -X stuff "save-all $(printf '\r')"

cd ~/backups/
rm -f minecraft-low.tar.gz.old
mv minecraft-low.tar.gz minecraft-low.tar.gz.old
cd /path/to/minecraft/parent/folder
tar -cpvzf ~/backups/minecraft-low.tar.gz minecraft_folder

screen -p 3 -X stuff "save-on $(printf '\r')"
screen -p 3 -X stuff "say Backup complete! World now saving. $(printf '\r')"

The stuff command was the magic I was looking for. It sends some nice 'say' commands to the console to let any players online know that the backup is running and turns world-saving on and off to allow a good, clean backup to be taken. Took some hunting around the web to find a way to send a return character in a stuff command. Found several, but printf is the first one I came across that worked, so I went with it. I set this to run in my cron daily and my friends are now a little more thankful that their world is getting backed up more reliably than me just remembering to do it on occasion.

For a real backup then, I use Wuala for my offsite backup service. They automatically do file versioning, so I then have at least 10 versions back of their world. Actually used it once to restore a corrupted world and they only lost about a week instead of their whole world.

Tags: 

Comments

Add new comment

Filtered HTML

  • E-Mail addresses are hidden with reCAPTCHA Mailhide.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Twitter-style @usernames are linked to their Twitter account pages.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.