Minecraft-Server-Service Open-RC

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert