Skip to content

Instantly share code, notes, and snippets.

@notyal
Last active November 25, 2020 19:07
Show Gist options
  • Save notyal/a720d59d030a3b4a913a3831c73d46fb to your computer and use it in GitHub Desktop.
Save notyal/a720d59d030a3b4a913a3831c73d46fb to your computer and use it in GitHub Desktop.
Script to run a Minecraft server in a screen session
#!/bin/bash
cd /opt/ftbr-minecraft
sudo -u minecraft _0="$0" /bin/bash ./serverstarter.sh $*
#!/bin/bash
# partially borrowed from https://minecraft.gamepedia.com/Tutorials/Server_startup_script
# Config
###############################################################################
# java binary
_java=/usr/lib/jvm/adoptopenjdk-8-hotspot-jre-amd64/bin/java
# screen session name
_screenS=ftbr-minecraft
###############################################################################
start_server() {
screen -dmS $_screenS \
$_java \
-server \
-XX:+UseG1GC \
-XX:+UnlockExperimentalVMOptions \
-Xmx4096M \
-Xms4096M \
-jar forge-1.12.2-14.23.5.2846-universal.jar nogui
}
###############################################################################
# set script name to calling script if _0 is set
[[ "$_0" == "" ]] && _0="$0"
stop_server() {
screen -p 0 -S $_screenS -X eval 'stuff "say Shutting down and saving map..."\\015'
screen -p 0 -S $_screenS -X eval 'stuff "save-all"\\015'
screen -p 0 -S $_screenS -X eval 'stuff "stop"\\015'
}
check_screen() {
screen -S $_screenS -Q 'select .' > /dev/null 2>&1
return $?
# 0 = running, 1 = not-running
}
usage() {
echo "Usage: $_0 [command]"
echo
echo "Commands:"
echo " start - start server"
echo " stop - stop server"
echo " check - check if server is running"
echo " attach - attach to screen session"
}
# parse commands
case $1 in
""|start)
if check_screen; then
echo
echo "----------------------------------------------"
echo "SERVER RUNNING: The server is already running."
echo "----------------------------------------------"
echo
usage
echo
else
echo "Starting minecraft server in screen..."
start_server
echo "Use '$_0 help' to see commands."
fi
echo "Use '$_0 attach' to reattach."
;;
stop)
if check_screen; then
echo "Stopping server..."
stop_server
else
echo "Server is not running."
fi
;;
check|status)
if check_screen; then
echo "Server is running."
echo "Use '$_0 attach' to reattach."
else
echo "Server is not running."
echo "Use '$_0 start' to start."
fi
;;
attach)
if check_screen; then
echo
echo "Use [ctrl-a] [d] to detach."
echo
sleep 1
screen -S $_screenS -x
else
echo "Server is not running."
echo "Use '$_0 start' to start."
fi
;;
help|usage)
usage
;;
*)
echo "Error: invalid command, '$1'."
echo
usage
exit 1
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment