[Linux] Bash-Script für's in Schleife setzen - implizit - von Minecraft-Server (geeignet für /restart-Befehle)

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Linux] Bash-Script für's in Schleife setzen - implizit - von Minecraft-Server (geeignet für /restart-Befehle)

      Hallo,

      auf Grund des Beitrags von Gokage96 habe ich mir erlaubt mein selbst geschriebenes Shell-Script für euch bereitzustellen.
      Zum Einsatz kann es auf Linux-Systemen kommen und ist dafür gemacht einen Minecraft-Server neuzustarten, nachdem er beendet wurde.
      Egal ob beendet durch einen Crash oder durch eigene (Kommandozeilen-)Anweisung.

      Wie lade ich das Script hoch?

      Nun, unten findest du den Spoiler mit dem Quellcode drin.
      Diesen speicherst du zum Beispiel direkt in deinem Minecraft-Server-Ordner, möglichst als '.sh'-Datei ab.

      Wie funktioniert das Script?

      Das Shell-Script startet eine Anwendung und behält sie im Vordergrund.
      Sollte der Server sich nicht vor 30 Sekunden nach dem Start wieder beenden, so wird er wieder neugestartet.
      Diese Vorsichtsmassnahme verhindert, dass der Server dauernd, in Schleife wieder neugestartet wird.

      Ein dauerhafter Neustart in Schleife kann unter Umständen die Festplatte(n) komplett belegen (etwa durch Logdateien, was ich schon mit 29 GB-Logs erlebt habe).
      Ausserdem kann man die Anwendung durch diese Massnahme sicher beenden.
      D.h., dass die Welten 'ordentlich' gesichert werden und kein Absturz der Anwendung notwendig ist, um diese komplett zu beenden.

      Zudem ist auch eine Delay-Variable eingestellt, mit der man zwischen Ende und Start der Anwendung eine Verzögerung einstellen kann.

      Was muss/kann ich einstellen?

      Du kannst drei Variablen einstellen.

      EXECUTION_FILE="java -Xmx1024m -Xms512m -jar spigot-1.8.8.jar"
      MIN_ELAPSED_TIME="30"

      RESTART_DELAY="0"

      Dabei gibt EXECUTION_FILE die Kommandozeile an, die den Minecraft-Server startet.
      'spigot-1.8.8.jar' kann in die '.jar'-Datei abgeändert werden, welche du nutzen möchtest.

      MIN_ELAPSED_TIME gibt die Zeit in Sekunden an, welche Minimal vergehen muss, damit ein Neustart, nach Beendigung der Anwendung vergehen muss.
      Sollte die Zeit nicht vergangen sein, so wird das gesamte Shell-Script beendet.

      Du kannst - was ich nicht empfehle - durch den Wert '0' diese Minimalzeit deaktivieren.

      RESTART_DELAY gibt die Zeit in Sekunden an, welche Verstreichen muss, bevor der Server erneut startet, nachdem der Server beendet wurde.

      Dieses Script in Kombination mit dem Verwaltungsscript?

      Ja, das kannst du.

      Du solltest allerdings einiges beachten.

      Zum restarten des servers solltest du ab jetzt das Kommando ./control.sh stop verwenden.
      Das ./control.sh restart-Kommando wirst du ab jetzt nicht mehr gebrauchen können und sollte auch nicht weiter verwendet werden.

      Wenn du deinen Server nun stoppen möchtest, nutzt du entweder den RESTART_DELAY oder du terminierst den Prozess.
      Zum nutzen des RESTART_DELAY gibst du in deiner Shell das Kommando ./control.sh stop; sleep 15; ./control.sh stop; ein. (Benötigt durch sleep 15, 15 Sekunden, damit die Server 'ordentlich' herunterfahren.

      Meine Meinung zu einem improvisierten Neustart

      Das Script, wie auch viele andere Scripte dieser Art nutzen die Entwicklungslücke des /restart-Befehls.
      Die Entwickler bieten von Haus aus kein solches Kommando, darum müssen Plugins und Shell-Scripts die aushilfe sein.

      Dieses Script ist eine Lösung, jedoch keine saubere Lösung und bei falschen Einstellungen und/oder Handhabungen kann es zu Datenverlust kommen, auch bei anderen Scripts.

      Hier ist das Script

      Spoiler anzeigen

      Shell-Script: loop-start.sh

      1. #!/bin/bash
      2. BINDIR=$(dirname "$(readlink -fn "$0")")
      3. cd "$BINDIR"
      4. EXECUTION_FILE="java -Xmx1024m -Xms512m -jar spigot-1.8.8.jar"
      5. MIN_ELAPSED_TIME="30"
      6. RESTART_DELAY="0"
      7. LASTSTART_TIMESTAMP=0
      8. while [ "${MIN_ELAPSED_TIME}" == "0" ] || [ ${LASTSTART_TIMESTAMP} -eq "0" ] || [ "$(($(date +%s) - ${LASTSTART_TIMESTAMP}))" -gt "${MIN_ELAPSED_TIME}" ]; do
      9. clear
      10. if [ "${LASTSTART_TIMESTAMP}" -ne "0" ] && [ "${RESTART_DELAY}" -ne "0" ]; then
      11. sleep ${RESTART_DELAY}
      12. fi;
      13. LASTSTART_TIMESTAMP=$(date +%s)
      14. ${EXECUTION_FILE}
      15. done;
      16. clear
      Alles anzeigen




      Ich hoffe mal wieder, ich konnte jemanden/einigen damit helfen. :P
      Ja, ich habe ein paar Sachen aus dem vorherigen Thread kopiert. :P
      BigDaddy // Mike
      IT-Fachinformatik / Praktische-Anwendungsentwicklung

      Support@7nz.de | BigDaddy@7nz.de