Łatwiejsze zarządzanie serwerem Minecraft
09 maja 2011
Wygląda na to, że temat Minecraft’a zagości na tym blogu na dłużej bo zarządzanie Debianem i samym serwerem Craftbukkit sprawia mi wielką frajdę
Szukając jakiegoś gotowca do robienia backupów map Minecrafta natrafiłem na arcyciekawy wpis kolegi ze Słowacji gdzie można znaleźć pakiet skryptów *.sh do podstawowej obsługi serwera Craftbukkit. Lekko je dostosowałem do własnych potrzeb (tak aby były kompatybilne z tym co opisałem we wcześniejszym wpisie).
Co dają nam te skrypty?
- Zgrabne startowanie, restartowanie i zatrzymywanie serwera. Wszystko z powiadomieniami dla graczy.
- Automatyczny backup naszych map.
- Automatyczny restart serwera w wybranych godzinach (w przykładzie o 5:30 rano) aby oczyścić RAM serwera, pozwolić mu zaczerpnąć powietrza
- Automatyczne sprawdzanie co pół godziny czy serwer nadal działa. Gdy coś padnie a Ciebie nie będzie to jest duża szansa, że serwer sam wstanie.
Skrypty:
bukkit_start.sh – prosty skrypt startujący serwer. Od siebie dodałem obsługę pobierania nowych wersji serwera Craftbukkit. Raczej nie wywołuj go bezpośrednio, jest stworzony na potrzeby reszty skryptów.
#!/bin/sh
if [ $# -eq 1 ]
then
if [ $1 = 'l' -o $1 = '-l' ]
then
echo "Pobieranie ostatniej wersji Bukkit"
wget http://ci.bukkit.org/job/dev-CraftBukkit/lastBuild/artifact/target/craftbukkit-0.0.1-SNAPSHOT.jar
mv -T craftbukkit.jar craftbukkit-last.jar
mv -T craftbukkit-0.0.1-SNAPSHOT.jar craftbukkit.jar
elif [ $1 = 'r' -o $1 = '-r' ]
then
echo "Pobieranie ostatniej rekomendowanej wersji Bukkit"
wget http://ci.bukkit.org/job/dev-CraftBukkit/promotion/latest/Recommended/artifact/target/craftbukkit-0.0.1-SNAPSHOT.jar
mv -T craftbukkit.jar craftbukkit-last.jar
mv -T craftbukkit-0.0.1-SNAPSHOT.jar craftbukkit.jar
fi
fi
java -d64 -Xincgc -Xmx1280M -jar craftbukkit.jar nogui
start.sh – nasz główny skrypt do startowania serwera. Sam martwi się o utworzenie screen’a dla Minecrafta (ale nie zakotwicza go do naszego okna). Nadal możesz używać parametrów -r i -l do pobierania nowych wersji Craftbukkit (opisane tutaj)
#!/bin/bash
if [ $# -eq 1 ]
then
screen -S minecraft -t world -d -m /opt/craftbukkit/bukkit_start.sh $1
else
screen -S minecraft -t world -d -m /opt/craftbukkit/bukkit_start.sh
fi
backup.sh – skrypt robi backup map serwera. Powiadamia grających użytkowników o przebiegu procesu, troszczy się o zapisanie mapy, kopiuje pliki i sam usuwa stare kopie bezpieczeństwa. Możesz skorzystać z wersji, która pakuje wszystko do plików zip ale ja stosuję proste kopiowanie wszystkich plików i folderów (działa szybciej a miejsca na dysku i tak nie brakuje). Ten skrypt kopiuje mapy o nazwach normal, nether i survival. Będziesz pewnie musiał dostosować skrypt do własnych potrzeb.
Jest też jedna wada. Skrypt robi backup nawet gdy między jedną kopią bezpieczeństwa a drugą nie było żadnych graczy. W takiej sytuacji nie ma powodu do robienia kopii bo nic się nie zmieniło na mapach. Można to załatwić poprzez użycie pluginu Backup. Przez jakiś czas go używałem i sprawuje się znakomicie. Zrezygnowałem z niego tylko dlatego, że wolę mieć pełnię władzy nad wszystkimi procesami związanymi z serwerem Minecrafta a dodatkowe, niepotrzebne kopie nie są dla mnie problemem (i tak się same usuną po dwóch dniach).
#!/bin/bash
# Minecraft AutoBackup
cd /opt/craftbukkit/
if [ -e server.log.lck ] #check if server is running
then
screen -S minecraft -p world -X stuff "say Generowanie kopii bezpieczenstwa"`echo -ne '\015'`
screen -S minecraft -p world -X stuff "save-off"`echo -ne '\015'`
screen -S minecraft -p world -X stuff "save-all"`echo -ne '\015'`
#zip -v backups/normal-`date "+%Y-%m-%d-%H-%M-%S"`.zip -r normal
#zip -v backups/nether-`date "+%Y-%m-%d-%H-%M-%S"`.zip -r nether
#zip -v backups/survival-`date "+%Y-%m-%d-%H-%M-%S"`.zip -r survival
cp -r normal backups/normal-`date "+%Y-%m-%d-%H-%M-%S"`
cp -r nether backups/nether-`date "+%Y-%m-%d-%H-%M-%S"`
cp -r survival backups/survival-`date "+%Y-%m-%d-%H-%M-%S"`
screen -S minecraft -p world -X stuff "save-on"`echo -ne '\015'`
screen -S minecraft -p world -X stuff "say Kopia wygenerowana"`echo -ne '\015'`
#dla plikow zip
#find /opt/craftbukkit/backups/ -type f -mmin +2880 -exec rm {} \;
find /opt/craftbukkit/backups/ -type d -mmin +2880 -exec rm -r {} \;
fi
restart.sh – restartuje serwer i ładnie powiadamia użytkowników o całym procesie.
#!/bin/bash # Minecraft AutoRestart cd /opt/craftbukkit/ screen -S minecraft -p world -X stuff "say Automatyczny restart za minute"`echo -ne '\015'` sleep 50 screen -S minecraft -p world -X stuff "say Automatyczny restart za dziesiec sekund!"`echo -ne '\015'` sleep 5 screen -S minecraft -p world -X stuff "say Automatyczny restart za piec sekund!"`echo -ne '\015'` screen -S minecraft -p world -X stuff "save-all"`echo -ne '\015'` sleep 5 screen -S minecraft -p world -X stuff "stop"`echo -ne '\015'` sleep 10 screen -S minecraft -t world -d -m /opt/craftbukkit/bukkit_start.sh sleep 20 screen -S minecraft -X stuff "say I po restarcie..."`echo -ne '\015'`
check.sh – sprawdza czy serwer działa. Jeżeli nie to go startuje i zapisuje logi z wydarzenia.
#!/bin/sh
cd /opt/craftbukkit/
if [ -e server.log.lck ]
then
echo "Serwer dziala!"
else
echo "Server nie dziala!"
screen -S minecraft -t world -d -m /opt/craftbukkit/bukkit_start.sh
NOW=$(date +"%b-%d-%y %H:%M")
echo '[' $NOW ']: Serwer nie dzialal... Ale juz dziala!' >> /opt/craftbukkit/ServerCheck.log
fi
stop.sh – mój prosty skrypt do zatrzymania serwera, bez restartu.
#!/bin/sh
cd /opt/craftbukkit/
if [ -e server.log.lck ]
then
screen -S minecraft -p world -X stuff "say Zatrzymanie serwera za 10 sekund"`echo -ne '\015'`
sleep 10
screen -S minecraft -p world -X stuff "stop"`echo -ne '\015'`
else
echo "Server nie dziala!"
fi
Na koniec podaję wpisy jakie powinny znaleźć się w Cronie aby móc w pełni korzystać z dobrodziejstw wyżej wypisanych skryptów:
## Minecraft #Backup map co godzine 0 * * * * cd /opt/craftbukkit && ./backup.sh > /dev/null 2>&1 #Restart serwera o godzinie 5:30 30 5 * * * cd /opt/craftbukkit && ./restart.sh > /dev/null 2>&1 #Sprawdzamy co pol godziny czy serwer dziala, jezeli nie to go podnosimy */30 * * * * cd /opt/craftbukkit && ./check.sh > /dev/null 2>&1
Pamiętajcie o uprawnieniach dla skryptów! Komenda chmod +x NAZWA_PLIKU.
EDIT 29.02.2012
Z nieukrywaną przyjemnością chciałbym zaprosić wszystkich na mój serwer Minecraft czyli na craftlandia.pl. Miłej zabawy!
Blog przede wszystkim o Internecie i mojej pasji jaką jest tworzenie stron www. Ale nie ograniczam się do jednej tematyki, piszę o wszystkim o czym mam ochotę :-)