3.6 KiB
Executable File
Auto Shutdown
Fährt den Minecraft Server automatisch nach 14 Tagen leerlauf herunter.
- lp_stamp: Timestamp an dem das letzte mal ein Spieler gesehen wurde
- lp_shutdown: Flag die dem Serverskript mitteilt, warum der Server heruntergefahren wurde
- 0: Normaler täglicher Shutdown, bzw. unerwarteter Shutdown -> automatischer Neustart
- 1: Shutdown wegen leerstand -> kein automatischer Neustart, warten auf Verbindung
Erkennung einer Minecraft Verbindung
Theoretisch könnte man mit nc -l 25500 -c :, aber dadurch startet sich der Server durch jede Verbindung.
Besser ist es, wenn man sich das Packet vorher anschaut, und nur den Server neu startet, wenn wirklich jemand in Minecraft sich versucht zu verbinden.
Das Packet sieht (zumindest mit Valhelsia) ungefähr so aus:
- Automatischer Verbindungstest von Minecraft wenn man das Multiplayer Menu öffnet:
^X^@M-r^E^Q[SERVERNAME]^@FML2^@cM-^\^A^A^@
- Wenn man auf "Connect" klickt:
^X^@M-r^E^Q[SERVERNAME]^@FML2^@cM-^\^B
^@^H[SPIELERNAME]
Auf eine legitime Verbindung zu warten kann dann z.B. so aussehen:
mcconn=0
until [ $mcconn -ne 0 ]; do
mcconn=$(nc -l 25500 | cat -v | grep -cF '^@cM-^\^B')
if [ $mcconn -eq 0 ]; then
echo "Something connected, but it doesn't look like a minecraft connection"
else
echo "Someone tried to connect to the minecraft server, starting..."
fi
done
Ein vollständigeres Regex, dass auf eine korrekte Verbindung prüft sieht so aus, doch leider scheint das nicht in grep zu funktionieren:
^\^X\^@M-r\^E\^Q[a-zA-Z0-9\.]+\^@[a-zA-Z0-9]+\^@cM-\^\\\^B\n\^@\^H[a-zA-Z0-9]+
Server Start Skript
Beim Starten des Servers wird eine große Menge an Parametern übergeben:
-Xms20G -Xmx20G: Wie viel Heap am Start und Maximal reserviert wird; sehr großzügig gewählt-javaagent:jolokia-jvm-1.6.2-agent.jar: Jolokia Agent, genutzt um Monitoringdaten aufzunehmen-XX:+UnlockExperimentalVMOptions: Schaltet ein paar experimentelle Optionen frei-XX:+UseG1GC: Welcher Garbage Collection Algorithmus genutzt wird; da Minecraft nur auf Java 8 läuft ist leider G1GC die beste Option-XX:MaxGCPauseMillis=100: Sagt dem GC dass es versuchen soll den Hauptthread nicht mehr als 100ms zu pausieren; ist keine Garantie!-XX:+DisableExplicitGC: Sorgt dafür das explizite GC Aufrufe ignoriert werden, da dass jedesmal ein Full GC ist und Modder das ab und zu (fälschlicherweise) verwenden-XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=50 -XX:G1ReservePercent=20: Setzt ein paar Größen für die verschiedenen "Bereiche" des GC Algorithmus; werden so empfohlen, kA was das genau macht-XX:ConcGCThreads=2 -XX:ParallelGCThreads=4: Threads die für die verschiedenen Phasen der GC verwendet werden; können gut auf hohe Werte eingestellt werdn, da MC praktisch nur einen Thread nutzt-XX:InitiatingHeapOccupancyPercent=25: Ab wann ein concurrent GC Cyclus gestartet wird in % vom Max Heap; niedrig eingestellt, da Minecraft sonst viel zu spät damit anfängt
-XX:+AlwaysPreTouch: "Berührt" den Heap Speicher beim Starten der JVM-Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1M: Aktiviert das Logging der GC und richtet Logrotation ein
Update Index
Kleines Skript, dass die html Seite die auf dem http(s) Port des Minecraft Servers angezeigt wird updated.