Erweitertes Minecraft Startscript

  • Hallo zusammen,


    ich habe gerade ein kleines Problem. Ich habe unseren MinecraftServer im Autostart von unserem VServer.
    Der Autostart und das Script funktionieren auch wunderbar. Hier das Script für den Autostart und die Steuerung.



    Jetzt haben wir aufgrund unserer Modvielfall das Problem das der Server gerne mal crasht, was jetzt nicht so dramatisch ist wenn ich zuhause bin, weil kann ich ja neustarten. Das Problem ist wenn ich nicht zuhause bin ist der Server offline. Also habe ich ein 2. Script, welches sich aber nur mit dem Nutzerselber ausführen lässt (Im Moment).



    Die Startdatei öffnet das Script, das Problem: Wenn ich den Server über den ersten Code nun stoppen will startet der den Server auch neu, was ein bisschen ungünstig ist falls ich den Server mal wirklich stoppen will. Und Killen will ich den Prozess nicht einfach, weil das nicht alle User können.


    Ich versuche gerade die beiden Scripts zu einem zu machen, gelingt mit auch soweit das ich den Server mit der "Neustart-Funktion" starten kann. Aber beim Stoppen will ich den ja nicht neustarten.
    Ich bin gerade etwas damit überfordert das erste Script so umzubauen das der Server auch wirklich gestoppt wird.
    Habt ihr eine Idee wie ich das bewerkstelligen kann.


    Danke und Gruß ASJoker.

    „Jeder Mensch trägt einen Zauber im Gesicht: irgendeinem gefällt er.”
    Friedrich Hebbel

  • Du redest immer von mehreren Benutzern.
    Wie meinst Du das denn? Gibt es mehr als einen Minecraft Linux Systemaccount?


    Es gibt für den Server einen Benutzer. Und neben mir noch 2 User die Server starten/stopen etc. können. Ich habe einen den Rootzugriff die anderen beiden aber nicht. Die haben Ihre eigenen Nutzernamen.
    Diese Nutzern können das Script benutzen aber sich nicht in den User minecraftftb einloggen. Gebern ungerne Passwörter raus). Würde heißen im Zweifel können die den Server nicht stoppen, da der immer wieder neugestartet wird.


    Gruß ASJoker

    „Jeder Mensch trägt einen Zauber im Gesicht: irgendeinem gefällt er.”
    Friedrich Hebbel

  • Das würde ich ganz einfach machen.
    Schreibe Dir ein Script, welches alle 60 Sekunden von einem Cron als root gestartet wird.


    Wenn sich nun im Ordner /home/minecraft eine Datei "starteneu" befindet, killt das Script den Server und startet ihn neu. Außerdem wird bei jedem Aufruf überwacht, ob Minecraft noch lebt, wenn nicht, wird das init Script ausgeführt.


    Bei jedem Crash-Neustart würde ich zusätzlich noch eine Email mit den letzten 50 Zeilen aus dem Minecraft Server Log an die Admins raus schicken. Sodass man hier nichts verpasst.


    Bekommst Du das gescripted, oder muss ich genauer werden? :)

  • Erstmal danke für die schnelle Antworrt, darf man ja nicht vergssen.


    Das mit dem Cron ist nicht praktikabel für mich weil 60Email/h möchte ich nicht bekommen, habe das prinzip auch nicht ganz verstanden.
    Das mit der Email und den letzen 50Logs ist ne gute Idee, würde ich aber nicht gecodet bekommen.


    Das mit der Datei verstehe ich nicht ganz, versuche ja die beiden Codes oben zusammen zuführen.


    Vielleicht noch als Info die Datei liegt im init.d und dient auch für meine Crons darüber steuer ich den Server.
    Mein Ziel gerade ist es die beiden Scripts zusammenzuführen.


    Aber du hast mich auf ne Idee für die Neustarts gebracht.11 Gecanceld, meine Leute töten mich wenn ich deren Chunks unloade xD


    Danke und Gruß ASJoker

    „Jeder Mensch trägt einen Zauber im Gesicht: irgendeinem gefällt er.”
    Friedrich Hebbel

    Einmal editiert, zuletzt von ASJoker ()

  • Die Scripte zusammen führen geht nicht, da Du ja ein zweites Script benötigst was das erste wiederbelebt, wenn dies nötig ist.


    Das Init Script würde ich einfach mit sudo für die anderen Benutzer verfügbar machen, sodass die dieses als root Ausführen dürfen, aber keine kompletten root Rechte dafür brauchen. Hier musst Du aber sicher stellen, dass keine Lücken im Script enthalten sind, da sonst die Gefahr einer root Shell für nicht-root-user besteht.


    Zusätzlich wird dann ein Script benötigt was regelmäßig per Cron gestartet wird und folgende Abfragen macht:


    Läuft Minecraft noch?
    Wenn ja, existiert die Datei /home/minecraft/keepalive?
    Wenn ja, starte Minecraft neu und schick eine Info an die Admins wegen Crash und so.
    Wenn nein, mach nichts.


    So können die nicht-root-admins entscheiden, ob die Autostart-nach-crash Automatik an ist oder nicht. Diese Automatik müsste auch als root via Cron gestartet werden und führt einfach nur das Init Script mit dem Parameter "start" aus, wenn Minecraft nicht mehr läuft.

  • Hallo danke für deine Ideen :), manchmal braucht man ein 2. Hirn.



    Habe das Script um "check" erweitert, lasse das als Cron alle 10Minuten laufen.
    Damit habe ich wieder mein Ziel nur eine Datei zu haben und mit prüfen ob Server gecrasht ist.
    Kann ich das Script um die "Emailfunktion mit dem Report" erweitern. Wenn ja könnte ich da etwas Codehilfe brauchen.


    Danke und Gruß ASJoker

    „Jeder Mensch trägt einen Zauber im Gesicht: irgendeinem gefällt er.”
    Friedrich Hebbel

  • Auch ne Idee, das mit dem check. :)


    Email versenden ist recht einfach:

    Code
    dmesg | tail -n 50 | mailx -s "Kabumm" mail@example.com


    Statt dmesg machst Du dann einfach ein cat auf das Server Log von Minecraft.


    soweit so gut läuft :)


    dmesg | tail -n 50 server.log | mailx -s "ServerLog" xx@xx.com
    die Zeile ist kein Problem,


    ich habe nur das Problem das die 2. Logdatei
    ForgeModLoader-server-X.log
    bei jedem Serverstart neu erzeugt wird.


    Code
    Beispielt:
    ForgeModLoader-server-0.log
    ForgeModLoader-server-1.log
    ForgeModLoader-server-2.log


    Jetzt kann ich die alte einfach löschen, ist aber ungünstig weil weg.
    ich könnte gucken welche am neusten ist oder einfach hochzählen lassen. Aber auch da fehlt mir die Codefertigkeit.


    Danke und Gruß

    „Jeder Mensch trägt einen Zauber im Gesicht: irgendeinem gefällt er.”
    Friedrich Hebbel

  • Hallo zusammen,


    habe nun das Script mit der Hilfe meines Mitschreibers fertig.
    Will euch das Werk nicht vorenthalten.



    nachdem ich gemerkt habe das die ForgeModLoader-server-*.log alle beschrieben werden habe ich die logs für alle 3 gesendet.
    Hier nochmal meine beiden Crons zu dem Script.


    Code
    0,30 3 * * * /etc/init.d/minecraftftb backup
    */10 * * * * /etc/init.d/minecraftftb check << bei Wartung sollte diese Zeile Auskommentiert werden, sonst geht der Server wieder an xD.


    Bei fragen gerne fragen.
    Danke und Gruß ASJoker

    „Jeder Mensch trägt einen Zauber im Gesicht: irgendeinem gefällt er.”
    Friedrich Hebbel

    Einmal editiert, zuletzt von ASJoker ()