niedziela, 28 grudnia 2014

Prosty i stabilny w obsłudze serwer Minecraft'a

Minecraft w sesji SCREEN’a

Istnieją działające rozwiązania wykorzystujące screen, pozwalają one na uruchomienie serwera Minecraft w tle i umożliwiają na dostęp do konsoli gry. Niestety wysyłanie poleceń ( np. /stop ) do serwera wymaga lekkiej gimnastyki i pomimo tego czasami po prostu nie działa.

Rozwiązania które znalazłem nie uznałem za wystarczająco niezawodne.

Dostęp do sesji screen’a z poziomu innego użytkownika należy odpowiednio skonfigurować, możliwe jest przypadkowe zamknięcie konsoli. Spotkałem, się też również z problemamy podwójnej daemonizacji - skrypt startowy nie może znaleźć PID serwera gdyż ten jest zakrywany przez screen który z kolei sam staje sie daemonem.

Przykład rozwiązania z użyciem komendy screen:

http://minecraft.gamepedia.com/Tutorials/Server_startup_script

Coś lepszego

Głównym problemem do rozwiązania był dostęp do konsoli oraz bezpieczne wyłączanie serwera by ten zdążył zapisać wygenerowane światy. Miłym dodatkiem jest też logowanie błędów serwera do logów systemowych.

Skrypt MiencraftD: https://github.com/glorpen/gentoo-overlay/blob/master/games-server/minecraft/files/minecraftd.py

Zalety
  • logi serwera trafiają do logów systemowych

  • akcje start/stop możliwe do uruchomienia z konsoli

  • bezpieczne zatrzymywanie - to serwer Minecraft’a decyduje o momencie swojego wyłączenia

  • możliwość uruchomienia konsoli serwera

  • wysyłanie komend z linii poleceń prosto do serwera

Wymagania skryptu
  • python 2.7 lub 3.3+

  • python-daemon

  • lockfile

Użycie
usage: minecraftd.py [-h] [--instance INSTANCE] {start,shell,stop,cmd} ...

Minecraft server daemonizer

positional arguments:
  {start,shell,stop,cmd}
    start               Starts minecraft daemon for given instance
    shell               Connects to Minecraft shell of given instance
    stop                Stops Minecraft daemon for given instance
    cmd                 Sends command to given instances shell

optional arguments:
  -h, --help            show this help message and exit
  --instance INSTANCE, -i INSTANCE
                        Instance name

Gdzie zdobyć

Skrypt ten jest częścią mojego portage overlay które można znaleźć:

Gentoo overlay: https://github.com/glorpen/gentoo-overlay

Gotowe ebuild dla serwera Minecraft znajduje się pod adresem: https://github.com/glorpen/gentoo-overlay/tree/master/games-server/minecraft

Skrypt init.d używany wraz z MinecraftD: https://github.com/glorpen/gentoo-overlay/blob/master/games-server/minecraft/files/minecraft.daemon.d

I jeszcze raz, skrypt daemonizujący aplikację: https://github.com/glorpen/gentoo-overlay/blob/master/games-server/minecraft/files/minecraftd.py