Skip to content

Instantly share code, notes, and snippets.

@maddiesch
Created April 20, 2014 10:12
Show Gist options
  • Save maddiesch/11110404 to your computer and use it in GitHub Desktop.
Save maddiesch/11110404 to your computer and use it in GitHub Desktop.
This is the script I run when setting up a new Minecraft server.
#!/bin/bash
# The name of the .jar file for the latest version.
MINECRAFT_LATEST="minecraft_server.1.7.9.jar"
# The URL for the lates version of the minecraft server
MINECRAFT_LATEST_LINK="https://s3.amazonaws.com/Minecraft.Download/versions/1.7.9/minecraft_server.1.7.9.jar"
# The screen name for the Minecraft Server
MINECRAFT_SCREEN_NAME="Minecraft"
# Setup some variables
pwd=$(pwd)
mc="$pwd/minecraft"
echo "Setting up Minecraft"
# Create the Minecraft folder if it doesn't exist
if [ ! -d $mc ]; then
echo "Creating $mc"
mkdir $mc
fi
cd $mc
# Create the .versions folder if it doesn't exist
versions="$mc/.versions"
if [ ! -d "$versions" ]; then
echo "Creating $versions"
mkdir "$versions"
fi
# Download the lates Minecraft
if [ ! -f "$versions/$MINECRAFT_LATEST" ]; then
echo "Downloading Minecraft $MINECRAFT_LATEST"
cd $versions
wget $MINECRAFT_LATEST_LINK -O $MINECRAFT_LATEST
cd $mc
else
echo "$MINECRAFT_LATEST already exists"
fi
cd $mc
# Remove current link and link latest to server.jar
if [ -f "$mc/server.jar" ]; then
rm "$mc/server.jar"
fi
ln -s "$versions/$MINECRAFT_LATEST" "$mc/server.jar"
# Create start.sh script
if [ ! -f "$mc/start.sh" ]; then
echo "screen -d -m -S $MINECRAFT_SCREEN_NAME java -jar server.jar -Xmx4G -Xms4G nogui" > "$mc/start.sh"
chmod +x "$mc/start.sh"
fi
# Create stop.sh script
if [ ! -f "$mc/stop.sh" ]; then
echo "screen -r $MINECRAFT_SCREEN_NAME -p 0 -X stuff \"stop \$(printf '\r')\"" > "$mc/stop.sh"
chmod +x "$mc/stop.sh"
fi
# Create backup.sh script
if [ ! -f "$mc/backup.sh" ]; then
echo "
screen -r $MINECRAFT_SCREEN_NAME -p 0 -X stuff \"say Performing backup \$(printf '\r')\"
screen -r $MINECRAFT_SCREEN_NAME -p 0 -X stuff \"save-off \$(printf '\r')\"
screen -r $MINECRAFT_SCREEN_NAME -p 0 -X stuff \"save-all \$(printf '\r')\"
sleep 3
# Backup
backups=\"$mc/../backups\"
if [ ! -d \$backups ]; then
mkdir \$backups
fi
cd $mc
# Delete file older than 5 days
find \$backups/*.tar.gz -mtime +5 -exec rm {} \;
NOW=$(date +"%Y-%m-%d")
tar -cpvzf \$backups/minecraft-\$NOW.tar.gz $mc --exclude='logs/*' --exclude='*.log' --exclude='.versions'
# Done
sleep 3
screen -r $MINECRAFT_SCREEN_NAME -p 0 -X stuff \"save-on \$(printf '\r')\"
screen -r $MINECRAFT_SCREEN_NAME -p 0 -X stuff \"say Backup complete. \$(printf '\r')\"
" > "$mc/backup.sh"
chmod +x "$mc/backup.sh"
fi
echo "Done"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment