Last active
April 9, 2022 16:20
-
-
Save egormkn/5318584ac20c62da9cdcf05590acbeb2 to your computer and use it in GitHub Desktop.
Minecraft Server setup script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# https://minecraft.gamepedia.com/Tutorials/Server_startup_script | |
# https://gist.github.com/justinjahn/4fe65b552b0622662420928cc8ffc7c0 | |
if [[ $EUID -ne 0 ]]; then | |
echo "This script must be run as root" | |
exit 1 | |
fi | |
# Create user if needed | |
id -u minecraft &> /dev/null | |
if [ $? -eq 1 ]; then | |
echo "Initial setup" | |
echo "- Creating 'minecraft' user" | |
sudo useradd -r -m -d /opt/minecraft minecraft | |
sudo chown -R minecraft:minecraft /opt/minecraft | |
echo "- Create systemd service" | |
echo "[Unit] | |
Description=Minecraft Server: %i | |
After=network.target | |
[Service] | |
WorkingDirectory=/opt/minecraft/instances/%i | |
User=minecraft | |
Group=minecraft | |
Restart=always | |
RestartSec=1s | |
ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xms1024M -Xmx1900M -jar minecraft_server.jar nogui | |
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff \"say SERVER SHUTTING DOWN IN 15 SECONDS...\"\015' | |
ExecStop=/bin/sleep 5 | |
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS...\"\015' | |
ExecStop=/bin/sleep 5 | |
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff \"say SERVER SHUTTING DOWN IN 5 SECONDS...\"\015' | |
ExecStop=/bin/sleep 5 | |
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff \"save-all\"\015' | |
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff \"stop\"\015' | |
[Install] | |
WantedBy=multi-user.target" > /etc/systemd/system/[email protected] | |
fi | |
# Setup folders if needed | |
cd /opt/minecraft | |
[ -d server-images ] || mkdir server-images | |
[ -d instances ] || mkdir instances | |
# Get server info | |
echo -en "\nEnter the new server's id (snake_case): " | |
read SERVER_ID | |
while [ -d "instances/$SERVER_ID" ]; do | |
echo -en "'instances/$SERVER_ID' already exists.\nTry Again: " | |
read SERVER_ID | |
done | |
echo -e "\nExisting server images:" | |
ls server-images | |
echo -en "\nEnter the image you want to use or ? to download a new one: " | |
read IMAGE_NAME | |
while [ ! -f "server-images/$IMAGE_NAME" ] && [ "$IMAGE_NAME" != "?" ]; do | |
echo -en "'server-images/$IMAGE_NAME' does not exist.\nTry Again: " | |
read IMAGE_NAME | |
done | |
# Donwload new image | |
if [ "$IMAGE_NAME" = "?" ]; then | |
echo -n "Enter download URL: " | |
read DOWNLOAD_URL | |
echo -n "Enter the image name (example: 'vanilla-1.15.2.jar'): " | |
read IMAGE_NAME | |
echo "$DOWNLOAD_URL > $IMAGE_NAME" | |
echo -en "Downloading server image... " | |
curl "$DOWNLOAD_URL" --output "server-images/$IMAGE_NAME" | |
echo "Done!" | |
fi | |
# Accept EULA | |
echo -en "\nBy continuing, you accept the following EULA (https://account.mojang.com/documents/minecraft_eula)\n[Press enter to accept]" | |
read ACCEPT_EULA | |
# Generate instance | |
echo -en "\nCreating 'instances/$SERVER_ID'... " | |
mkdir "instances/$SERVER_ID" | |
cp "server-images/$IMAGE_NAME" "instances/$SERVER_ID/$IMAGE_NAME" | |
cd "instances/$SERVER_ID" | |
echo "eula=true" > eula.txt | |
ln -s "$IMAGE_NAME" minecraft_server.jar | |
# POINT THE NEXT LINE TO AN EXISTING INSTANCE | |
# If you don't have an existing instance, it will log an error and minecraft will generate this file for you. | |
cp "../default_instance/server.properties" server.properties | |
sudo chown -R minecraft:minecraft . | |
cd /opt/minecraft | |
echo "Done!" | |
# Spinning up for the first time | |
echo -en "\nSpinning up to generate necessary server files (this will take ~2 minutes)... " | |
sudo systemctl start "minecraft@$SERVER_ID" | |
sleep 2m # lol | |
sudo systemctl stop "minecraft@$SERVER_ID" | |
sudo chown -R minecraft:minecraft "instances/$SERVER_ID" | |
echo "Done!" | |
# Helpful stuff | |
echo -e "\nYour server is ready to go! Helpful commands:" | |
echo "------" | |
echo " # Start it up" | |
echo " sudo systemctl start minecraft@$SERVER_ID" | |
echo " sudo systemctl stop minecraft@$SERVER_ID" | |
echo " sudo systemctl restart minecraft@$SERVER_ID" | |
echo " sudo systemctl reload minecraft@$SERVER_ID" | |
echo "" | |
echo " # If you want to start this server on startup" | |
echo " sudo systemctl enable minecraft@$SERVER_ID" | |
echo " # If you want to undo enabling it" | |
echo " sudo systemctl disable minecraft@$SERVER_ID" | |
echo "------" | |
echo "" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment