Ich war schon seit einiger Zeit auf der Suche nach einem guten Service-Setup für Minecraft-Server unter Linux.
Leider habe ich nichts gefunden, was meiner Erwartung entspricht, und habe daher selbst angefangen, einen Service zu bauen.
Da ich eine möglichst Baremetal-Performance erreichen möchte, habe ich mich für Alpine Linux entschieden, welches standardmäßig den Service-Manager Open-RC mitbringt.
Nach und nach habe ich dann das folgende Open-RC-Script entwickelt, welches sich nach der Anpassung der Variablen über diese Commands bedienen lassen wird.
rc-service <service_name> start
rc-service <service_name> stop
rc-service <service_name> restartCode-Sprache: HTML, XML (xml)
Der Service wird wie folgt erstellt:
nano /etc/init.d/<service_name>Code-Sprache: HTML, XML (xml)
#!/sbin/openrc-run
description="Minecraft Server"
command="/usr/lib/jvm/default-jvm/bin/java"
ram="6G"
jarfile=/usr/local/share/minecraft/server.jar
java_args=""
directory="/var/minecraft"
pidfile="/run/minecraft.pid"
screen_session="minecraft"
depend() {
need net
after firewall
}
start() {
ebegin "Starting Minecraft server"
cd "$directory"
screen -dmS minecraft "$command -Xms$ram -Xmx$ram $java_args -jar $jarfile nogui"
screen -ls | awk '/\.minecraft[[:space:]]/{print $1}' | grep -o '^[0-9]*' > $pidfile
einfo "Waiting for Minecraft server to start"
sleep 5
while ! grep -q "Done" $directory/logs/latest.log 2> /dev/null; do
sleep 1
done
einfo "Minecraft server started"
eend $?
}
stop() {
ebegin "Stopping Minecraft server"
pid=$(cat $pidfile)
screen -dr $pid -X stuff '^C'
while screen -ls | grep -q "$pid\.minecraft"; do
sleep 1
done
einfo "Minecraft server stopped"
eend $?
}
Code-Sprache: PHP (php)
Zuletzt muss noch festgestellt werden, ob Änderungen an den Variablen vorgenommen werden müssen.
- command -> Ist Java installiert und kann über den Command genutzt werden?
Testen mit „<command> –version“, also z.B.: „/usr/lib/jvm/default-jvm/bin/java –version“
Der Pfad zur Java-Executable kann je nach System und Version variieren und muss möglicherweise angepasst werden. - ram -> Wie viel RAM soll der Server benutzen? Kann in G -> Giga-Byte, M -> Mega-Byte und B -> Byte angegeben werden.
- jarfile -> die jar-File des Minecraft-Servers.
- java_args -> optional können noch Java-Argumente eingetragen werden
Von Paper gibt es zum Beispiel diesen Guide: https://docs.papermc.io/paper/aikars-flags/ - directory -> der Ordner, wo die Dateien des Minecraft-Servers liegen werden. Dieser muss ggf. noch erstellt werden.