minecraft-Server mit Linux starten und stoppen

3. Januar 2012 um 13:58 in Linux von
Artikel aktualisiert am 25.04.2012 um 09:02

Nachdem ich nun auch dem MineCraft-Fieber verfallen bin, habe ich mich dran gemacht und einen Server aufgesetzt.

Da es sich hierbei um eine Java-Geschichte handelt und das starten mittels ‘screen’ manchmal mehr als nervig ist, habe ich mir ein sehr einfaches start-stop-Script gebaut, welches ich hier vorstellen möchte :)

Schwupps, da ist’s auch schon…

 

Wir legen folgende Datei an und ändern die Pfade entsprechend:
sudo vi /etc/init.d/minecraft

#!/bin/bash
#
#Script for easy starting and stopping a minecraft-server
#Just replace the path on Line 10 with your path to the minecraft_server.jar
#You might need to adjust the minRAM and maxRAM too.
#
#http://www.statt-porn.de
#
#Insert path to minecraft_server.jar here
DIR=/home/minecraft
#Insert max. RAM you want Minecraft to use
MAX=2048M

#Insert min. RAM you want Minecraft to use
MIN=768M

echo ""
echo ""

case "$1" in
start)
#check if there is a screen called "minecraft"
is_it_running=`screen -ls | grep minecraft`
if [ "$is_it_running" != "" ]
then
echo "*** There is already a screen called 'minecraft' running. Aborting!"
else
echo "*** Starting minecraft-Server on screen 'minecraft'"
cd $DIR
screen -L -A -m -d -S minecraft java -Xms$MIN -Xmx$MAX -jar minecraft_server.jar nogui

#check if it is running now
status=`screen -ls | grep minecraft`
if [ "$status" == "" ]
then
echo "*** Starting failed!"
else
echo "*** Server started successfully!"
echo "*** You may now connect to console via 'screen -r minecraft'"
echo $status
fi
fi
echo ""
echo ""
;;
stop)
echo "*** Looking for running minecraft-Server via 'screen'"

#check if there is a screen called "minecraft"
is_it_running=`screen -ls | grep minecraft`
if [ "$is_it_running" != "" ]
then
echo "*** Running minecraft-Server found:" $is_it_running
echo "*** Saving chunks with 'save-all'"
screen -S minecraft -X stuff $'save-all\n'
echo "*** Sending message to players, that server will shutdown in 30 sec"
screen -S minecraft -X stuff $'say Server will shut down in 30 sec\n'
echo "*** Message sent. Wait 30 sec ..."
sleep 30
echo ""
echo "*** Stopping" $is_it_running "now."
screen -S minecraft -X stuff $'stop\n'

#wait a while and then test if screen is there
sleep 5
status_off=`screen -ls | grep minecraft`

if [ "$status_off" == "" ]
then
echo "*** minecraft-Server stopped!" $status_off
else
echo "*** Something went wrong!" $status_off
fi
else
echo "*** No screen called 'minecraft' found. Is server really running?"
fi
echo ""
echo ""
;;
*)
echo $"*** Usage: $0 {start|stop}"
exit 1
esac

Man kann dieses Script auch nutzen, um den MineCraft-Server starten zu lassen, wenn der Wirt-Server mal neugestartet wird.

Einfach entsprechend nach rc2.d linken:

ln -s /etc/init.d/minecraft /etc/rc2.d/S99minecraft

Möchte man den MineCraft.Server auch sauber herunterfahren, wenn der Wirt-Server heruntergefahren wird, geht man ähnlich zu obiger Anleitung vor:

ln -s /etc/init.d/minecraft /etc/rc0.d/K99minecraft

Zu Guter Letzt kann man noch einen Hardlink nach /usr/bin setzen, damit man überall mit “minecraft start|stop” den Server starten/stoppen kann

ln /etc/init.d/minecraft /usr/bin

Das sollte es eigtl. gewesen sein :)
Fragen? Anregungen? Kritik? Her damit!

In eigener Sache
Ich gebe mir beim Schreiben Mühe, den Artikel so verständlich und genau wie möglich zu verfassen. Sollte mir ein Fehler unterlaufen, lass es mich wissen. Sollte Dir der Beitrag gefallen haben, kannst Du mich mit einem Klick auf den Banner unter dem Beitrag belohnen. Über ein "Share" in einem SocialNetwork freue ich mich ebenso, wie über einen Kommentar zum Beitrag. Danke!

  • Pingback: » Backup eines MineCraft-Servers mit rsnapshot - statt-porn.de

  • tehCrush

    Nette sache an sich. Bau noch eine restart) option ein, mach ne vernünftige init info und setz das ganze in die rc6, dann funzt das ganze auch bei einem simplen restart. mit der richtigen init info kannst du dir die rc*d kopien auch einfach ersparen. musst halt nur rc-d updaten, geht aber einfacher als das rumkopiere

    • Jan Beuth

      Dein Kommentar ist wohl irgendwie im Spamfolder gelandet :-/
      Irgendwann soll die Kiste auch mal ein "echte" init bekommen. Hab ich beim TS ja auch gemacht. Aber da mein Server eh nur alle Jubeljahre neugestartet wird, stört es mich derzeit nicht weiter :)