Wer gerne die aktuellste Snapshot-Version von Minecraft spielt, nimmt auch die „Risiken“ in Kauf, die mit einer solchen Snapshot-Version einhergehen. Solche Snapshots erscheinen für Minecraft beinahe täglich und stellt den Minecraft-Server-Betreiber somit vor das Problem, ständig den Server aktualisieren zu müssen. Um diesen Vorgang zu automatisieren, habe ich mir ein kleines Bash-Script gebastelt, dass die dazu notwendigen Schritte automatisiert.
Einrichtung eines init-Scripts
Zunächst fügen wir ein init-Script hinzu, damit wird Minecraft bequem starten und stoppen können. Dazu editieren wir die neue Datei „/etc/init.d/minecraft“ und fügen folgenden Inhalt ein:
#!/bin/bash
# /etc/init.d/minecraft
# version 0.3.2 2011-01-27 (YYYY-MM-DD)
### BEGIN INIT INFO
# Provides: minecraft
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Minecraft server
# Description: Starts the minecraft server
### END INIT INFO
#Settings
SERVICE='minecraft_server.jar'
USERNAME="loginuser"
MCPATH='/home/loginuser/minecraft'
CPU_COUNT=4
INVOCATION="java -Xmx2048M -Xms2048M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar minecraft_server.jar nogui"
BACKUPPATH='/home/loginuser/minecraft/backup'
ME=`whoami`
as_user() {
if [ $ME == $USERNAME ] ; then
bash -c "$1"
else
su - $USERNAME -c "$1"
fi
}
mc_start() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "Tried to start but $SERVICE was already running!"
else
echo "$SERVICE was not running... starting."
cd $MCPATH
as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
sleep 7
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is now running."
else
echo "Could not start $SERVICE."
fi
fi
}
mc_saveoff() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... suspending saves"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
sync
sleep 10
else
echo "$SERVICE was not running. Not suspending saves."
fi
}
mc_saveon() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... re-enabling saves"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
else
echo "$SERVICE was not running. Not resuming saves."
fi
}
mc_stop() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... stopping."
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
sleep 10
as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
sleep 7
else
echo "$SERVICE was not running."
fi
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE could not be shut down... still running."
else
echo "$SERVICE is shut down."
fi
}
#Start-Stop here
case "$1" in
start)
mc_start
;;
stop)
mc_stop
;;
restart)
mc_stop
mc_start
;;
status)
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running."
else
echo "$SERVICE is not running."
fi
;;
*)
echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart}"
exit 1
;;
esac
exit 0
Hierbei können wir die notwendigen Zeilen an die eigenen Gegebenheiten anpassen, die beispielsweise angeben, an welcher Stelle Minecraft entpackt wurde. In meinem Fall betreibe ich Minecraft im Verzeichnis „/home/loginuser/minecraft„, die auszuführende Datei heißt „minecraft_server.jar“ und der Nutzer, unter welchem der Minecraft-Server läuft heißt „loginuser„.
wget installieren
Für unser Script benötigen wir das Programm „wget“ dass wir wie folgt installieren:
apt-get install wget
Update-Script
Im Anschluss erstellen wir eine neue Datei, beispielsweise mit
nano /home/loginuser/minecraft/update-minecraft.sh
und fügen folgendes Script ein:
#!/bin/bash
HOMEDIR='/home/loginuser/minecraft'
###################################
wget -O $HOMEDIR/versions.json -qN https://s3.amazonaws.com/Minecraft.Download/versions/versions.json
if ! [[ $? = 0 ]]; then
echo "Versionsdatei konnte nicht heruntergeladen werden."
exit 1;
fi
VER=`sed -n -e '/\"latest\"/,/}/ s/.*\"snapshot\": \"\([^\"]*\)\".*/\1/p' < $HOMEDIR/versions.json`
rm $HOMEDIR/versions.json
if [ -f $HOMEDIR/installierteversion.txt ]; then
INSTVER=`cat $HOMEDIR/installierteversion.txt`
if [ "$VER" = "$INSTVER" ]; then
echo "Die installierte Version ist aktuell."
exit 0;
fi
fi
echo "Minecraft wírd auf Version $VER aktualisiert."
/etc/init.d/minecraft stop
if ! [[ $? = 0 ]]; then
echo "Minecraft konnte nicht gestoppt werden."
exit 1;
fi
wget -O $HOMEDIR/minecraft_server.$VER.jar -N https://s3.amazonaws.com/Minecraft.Download/versions/$VER/minecraft_server.$VER.jar
if ! [[ $? = 0 ]]; then
echo "Herunterladen nicht erfolgreich."
exit 1;
fi
rm $HOMEDIR/minecraft_server.jar
mv $HOMEDIR/minecraft_server.$VER.jar $HOMEDIR/minecraft_server.jar
echo $VER > $HOMEDIR/installierteversion.txt
/etc/init.d/minecraft start
echo "Update abgeschlossen."
Dem Script erlauben wir die Ausführung mit
chmod +x /home/loginuser/minecraft/update-minecraft.sh
und erstellen einen neuen Crontab, damit das Script regelmäßig ausgeführt wird.
Cronjob erstellen
Den Crontab-Editor öffnen wir immer mit
crontab -e
wobei wir beim ersten Start nach unserem favorisierten Editor gefragt werden. „nano“ ist hier zunächst eine gute Wahl.
Anschließend fügen wir folgende Zeile ein:
0 0 * * * /home/loginuser/minecraft/update-minecraft.sh
Nach dem Speichern und Schließen der Crontabs wird nun das Update-Script stündlich ausgeführt. Zu beachten ist dabei, dass der Client ebenfalls über die neuste Snapshot-Version verfügt und für die Installation von Snapshots konfiguriert wurde.
Übersicht der Versionen
Die jeweils aktuellste Version von Minecraft ist auf dieser Seite sehr übersichtlich gelistet: https://mcversions.net
Minecraft-Server automatisch aktualisieren
Wer gerne die aktuellste Snapshot-Version von Minecraft spielt, nimmt auch die „Risiken“ in Kauf, die mit einer solchen Snapshot-Version einhergehen. Solche Snapshots erscheinen für Minecraft beinahe täglich und stellt den Minecraft-Server-Betreiber somit vor das Problem, ständig den Server aktualisieren zu müssen. Um diesen Vorgang zu automatisieren, habe ich mir ein kleines Bash-Script gebastelt, dass die dazu notwendigen Schritte automatisiert.
Einrichtung eines init-Scripts
Zunächst fügen wir ein init-Script hinzu, damit wird Minecraft bequem starten und stoppen können. Dazu editieren wir die neue Datei „/etc/init.d/minecraft“ und fügen folgenden Inhalt ein:
Hierbei können wir die notwendigen Zeilen an die eigenen Gegebenheiten anpassen, die beispielsweise angeben, an welcher Stelle Minecraft entpackt wurde. In meinem Fall betreibe ich Minecraft im Verzeichnis „/home/loginuser/minecraft„, die auszuführende Datei heißt „minecraft_server.jar“ und der Nutzer, unter welchem der Minecraft-Server läuft heißt „loginuser„.
wget installieren
Für unser Script benötigen wir das Programm „wget“ dass wir wie folgt installieren:
Update-Script
Im Anschluss erstellen wir eine neue Datei, beispielsweise mit
und fügen folgendes Script ein:
Dem Script erlauben wir die Ausführung mit
und erstellen einen neuen Crontab, damit das Script regelmäßig ausgeführt wird.
Cronjob erstellen
Den Crontab-Editor öffnen wir immer mit
wobei wir beim ersten Start nach unserem favorisierten Editor gefragt werden. „nano“ ist hier zunächst eine gute Wahl.
Anschließend fügen wir folgende Zeile ein:
Nach dem Speichern und Schließen der Crontabs wird nun das Update-Script stündlich ausgeführt. Zu beachten ist dabei, dass der Client ebenfalls über die neuste Snapshot-Version verfügt und für die Installation von Snapshots konfiguriert wurde.
Übersicht der Versionen
Die jeweils aktuellste Version von Minecraft ist auf dieser Seite sehr übersichtlich gelistet: https://mcversions.net
Verwandte Beiträge
Kann man einen V-Server oder einen dedizierten Server in einem Rechenzentrum sein Eigen nennen, bietet…
Unser bisheriger Tintenstrahldrucker ist in die Jahre gekommen und gab irgendwann gänzlich den Geist auf.…
Seit einigen Version von Windows Server ist es möglich, NFS-Dateifreigaben einzurichten, welche dann unter vielen Linux-Distributionen…
In vielerlei Hinsicht ist es wichtig,dass Netzwerkgeräte und Server über die gleiche Uhrzeit verfügen. Aufgrund…
Manche Vorgänge am Raspberry Pi führen wir immer und immer wieder durch. Daher möchte ich…