Natenoms Wiki

Weil Teilen Spaß macht :)

Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Übersetzungen dieser Seite:

Navigation



Lizenz dieses Wikis
Über dieses Wiki
Feed des Wikis
Impressum


Was gerade in meinem Blog geschieht:

minecraft:mcontrol

mcontrol.sh – Minecraft-Server Steuerung, Backup und mehr...

Mit diesem Shell-Script kann man einen oder mehrere Minecraft-Server steuern, starten, beenden, neustarten, (inkrementelle) Backups erstellen, Befehle an den Server senden, usw.

Dabei ist es auch möglich, unter demselben Benutzeraccount mehrere unabhängige Server laufen zu lassen, da Einstellungen und Screen-Sessions Minecraft-Server-basiert sind, nicht Benutzer-basiert.

Wir verwenden dieses Script für unsere Minecraft-Server.

Die aktuelle Test-Version (master) hat Support für tmux :) Es gibt jedoch noch keine ordentliche Methode, an die PID des Servers zu kommen – tmux hilft hier nicht, da es nur von der ersten Session einen Prozess in der Liste zu geben scheint… (?). Außerdem ist das Handling von tmux und Prozessliste etwas anders als bei screen. Beim nächsten Mal werde ich auch einen eigenen Branch für sowas machen :)

Man sollte deshalb tmux maximal einmal pro Benutzer verwenden, sonst gibt es Probleme. Mit Screen geht alles wie gewohnt.

Die aktuelle Version gibt es bei Github zum Herunterladen:
https://github.com/Natenom/mcontrol/tags.

Dieses Script basiert auf Server_startup_script version 0.3.2 2011-01-27; hat mittlerweile aber nicht mehr viel gemeinsam.
Ich habe es sehr stark überarbeitet, verschlankt und an eigene Bedürfnisse angepasst. Z. B. war das Original nicht in der Lage, mehrere Server zu verwalten und war ziemlich grausig gemacht; statt z. B. Funktionen zu verwenden wurde derselbe Code mehrmals geschrieben.

Lizenz
Wie auch das Original liegt dieses abgeleitete Script unter der Lizenz „CC Attribution-NonCommercial-ShareAlike 3.0 Unported“.

Kommandos von mcontrol.sh

start|stop|restart

Sollte der Minecraft-Server bei restart/stop nicht mehr reagieren, so wird mittels kill trotzdem gewährleistet, dass er beendet wird.

Beispiel:

mcontrol.sh /etc/minecraft-server/mcuser1/server2 restart
craftbukkit-1.1-R4-SNAPSHOT.jar is running... stopping.
craftbukkit-1.1-R4-SNAPSHOT.jar is not running... starting.
craftbukkit-1.1-R4-SNAPSHOT.jar is now running.

Jeder Server wird in einer eigenen Screen-Session gestartet die dem jeweiligen Benutzer gehört. Trotzdem kann man das Script auch als root ausführen.

restartandsync

Nützlich, wenn der Server in einer Ramdisk läuft; damit kann man ihn beim täglichen Neustart direkt von der Ramdisk auf die Festplatte des Servers synchronisieren lassen.

Beispiel:

mcontrol.sh /etc/minecraft-server/mcuser1/server2 restartandsync
craftbukkit.jar is running... stopping.
Server is still running, giving 20 seconds to shutdown. Waiting...
Server managed to shutdown cleanly.
Your Server is using a ramdisk, don't forget to do a ramd-to-s before complete server shutdown...
Starting rsync, from ramdisk to disk...
rsync -a --delete "/home/minecraft/mcuser1/server2/" "/home/minecraft/mcuser1/server2_prerun"
craftbukkit.jar is not running... starting.
craftbukkit.jar is now running.

status

Gibt aus ob der Server läuft oder nicht.

Beispiel:

mcontrol.sh /etc/minecraft-server/mcuser1/server2 status
craftbukkit-1.1-R4-SNAPSHOT.jar is running.

sendcommand|sc|c

Befehle an einen Server senden, z. B. say oder administrative Dinge

Beispiel:

mcontrol.sh /etc/minecraft-server/mcuser1/server2 sc "say Hallo"

backup

Weitere Informationen siehe unter Inkrementelle Backups in mcontrol.

Bei Verwendung von BACKUPSYSTEM=rdiff wird auch sichergestellt, dass das Quota eingehalten wird; dieses kann in der Konfiguration jedes Servers hinterlegt werden (BACKUP_QUOTA_MiB).

Hier die Ausgabe auf der Konsole beim Aufruf des Backups unter Verwendung von rdiff-backup:

mcuser@server:~$ mcontrol.sh /etc/minecraft-server/mcuser1/server2 backup
craftbukkit-1.1-R4-SNAPSHOT.jar is running... suspending saves
Backing up mc-server-mcuser1-server2.
Total backup size (2051 MiB) is less or equal quota (5000 MiB).
craftbukkit-1.1-R4-SNAPSHOT.jar is running... re-enabling saves

s-to-ramd

Sync-to-Ramdisk. Synchronisiert den Inhalt von SERVERDIR_PRERUN nach SERVERDIR.

Funktioniert nur, wenn der Server aus ist.

s-from-ramd

Sync-from-Ramdisk. Synchronisiert den Inhalt von SERVERDIR nach SERVERDIR_PRERUN.

Funktioniert nur, wenn der Server aus ist.

listbackups

Funktioniert nur bei BACKUPSYSTEM=rdiff.

Zeigt eine Liste der ikrementellen Backups des Server an.

Beispiel:

mcuser@server:~$ mcontrol.sh /etc/minecraft-server/mcuser1/server2 backup
Backups for server "server2"
Found 230 increments:
    increments.2012-02-18T23:00:12+01:00.dir   Sat Feb 18 23:00:12 2012
    increments.2012-02-18T23:30:13+01:00.dir   Sat Feb 18 23:30:13 2012
    increments.2012-02-19T00:00:12+01:00.dir   Sun Feb 19 00:00:12 2012
    increments.2012-02-19T00:30:15+01:00.dir   Sun Feb 19 00:30:15 2012
    increments.2012-02-19T01:00:15+01:00.dir   Sun Feb 19 01:00:15 2012
    ...

Current mirror: Thu Feb 23 16:30:11 2012
        Time                       Size        Cumulative size
-----------------------------------------------------------------------------
Thu Feb 23 16:30:11 2012          379 MB            379 MB   (current mirror)
Thu Feb 23 16:00:12 2012         16.5 MB            396 MB
Thu Feb 23 15:39:46 2012         4.29 MB            400 MB
Thu Feb 23 15:30:12 2012         2.37 MB            402 MB
...

lottery

Ein eigenes Plugin für genau diese Art von Lottery gibt es unter MinecraftLottery.

Der Benutzer bekommt eine zufällige Anzahl x eines Gegenstands y.

Die notwendigen ID-Listen sind bereits im Download enthalten:

  • id.list beinhaltet nur bestimmte Gegenstände; hier kann man selbst Hand anlegen.
  • id.list-names beinhaltet die Namen der Gegenstände und wird automatisch erstellt; siehe hier.

Beispiel:

mcontrol.sh /etc/minecraft-server/mcuser1/server2 lottery yourname
Name: yourname
Anzahl: 6
Bezeichnung(ID): SEEDS(295)
Done.

pid

Man erhält die PID (Prozess ID) des Servers.

Beispiel:

mcontrol.sh /etc/minecraft-server/mcuser1/server2 status
96821

-debug

Dieses muss immer das letzte Argument sein; es schaltet das tracing der Shell ein (set -x).

Beispiel:

mcontrol.sh /etc/minecraft-server/mcuser/server2 status -debug
+ ps aux
+ grep 'mc-server-mcuser1-server2 '
+ grep SCREEN
+ grep -v grep
+ return 0
+ echo 'craftbukkit.jar is running.'
craftbukkit.jar is running.
+ exit 0

Einstellungen von mcontrol.sh

Konfigurationsdatei pro Server

Wo diese Datei liegt ist erstmal egal; jedoch sollte der Benutzer keine Schreibrechte darauf haben, damit er keinen Scheiss bauen kann, wie z. B. weitere Backupverzeichnisse hinzufügen um die Platte zu belasten, BackupQuota zu erhöhen, usw.

Z. B. für den oben aufgeführten mcuser1 und dessen server2 die Datei /etc/minecraft-server/mcuser1/server2:

Siehe unter https://github.com/Natenom/mcontrol/blob/master/server2.cfg.

Backup und Restore (inkrementelles Backupsystem)

Server in Ramdisk (tmpfs) laufen lassen

Solange eine bestimmte Datei existiert, startet der Server nicht

Name der Datei ist einstellbar in der Konfiguration pro Server.

Variable ist DONT_START.

Überprüft wird die Existenz der Datei nur bei der Funktion mc_start().

Hilfe

Beim Aufruf ohne weitere Angaben:

Usage: mcontrol.sh SETTINGS_FILE COMMAND [ARGUMENT]

COMMANDS
    start                 Start the server.
    stop                  Stop the server.
    restart               Restart the server.
    restartandsync        Restart the server and do a sync from ramdisk to disk after stopping and before starting the server.
    backup                Backup the server.
    s-to-ramd		  Sync server contents from SERVERDIR_PRERUN("") to SERVERDIR("")
    s-from-ramd		  Sync server contents from SERVERDIR("") to SERVERDIR_PRERUN("")
    listbackups           List current incremental backups (only available for BACKUPSYSTEM="rdiff").
    status                Prints current status of the server (online/offline)
    sendcommand|sc|c      Send command to the server given as [ARGUMENT]
    lottery <playername>  Gives a player a random count of a random item. (Player must have a free inventory slot.)
    pid		          Get pid of a server process.
    -debug		  Must be the last argument. Enables shell trace output (set -x)

EXAMPLES
    Send a message to all players on the server:
    mcontrol.sh SETTINGS_FILE sendcommand "say We are watching you :P"

    Give me some golden apples:
    mcontrol.sh /etc/minecraft-server/userx/serverx sendcommand "give yourname 322 100"

Todo

Verzeichnisstrukturen

Serververzeichnisse

Als Beispiel eine Verzeichnisstruktur der Minecraft-Server/Benutzer:

/home/minecraft-server/
                       user1/
                             server1/...
                             server2/...
                       user2/
                             server1/...
                             server2/...
minecraft/mcontrol.txt · Zuletzt geändert: 2015/11/26 18:14 von Natenom