Linuxpl.com, SSH i wersja PHP

06 grudnia 2011

Skuszony wieloma rekomendacjami i niskimi cenami, postanowiłem skorzystać z oferty hostingowej linuxpl.com. Podstawowym plusem jest także możliwość zmiany wersji PHP na 5.3. Ta wersja pojawiła się dwa i pół roku temu a do tej pory nie jest dostępna na większości hostingów :/

Na linuxpl.com dostajemy również dostęp do SSH, co bywa dla mnie czasami zbawienne. W ustawieniach zmieniłem wersję PHP na 5.3 i z poziomu SSH chciałbym uruchamiać skrypty także pod tą wersją. Niestety, bez względu na ustawienia w panelu, komenda „php skrypt.php” pod SSH zawsze chce korzystać z PHP w wersji domyślnej dla linuxpl.com czyli PHP 5.2. Dokonałem tego odkrycia podczas gorączkowych przygotowań do uruchomienia lastdeal.pl więc postanowiłem nie czekać na support i rozwikłać zagadkę sam.

Nie da się na linuxpl.com sprawić aby zwykłe „php skrypt.php” działało w wersji innej niż PHP 5.2. Można jednak podać ścieżkę do innej wersji PHP. Jest to kłopotliwe bo trzeba wpisać za każdym razem długie ścieżki ale przynajmniej w ogóle się da. Swoją drogą niektóre (większość?) skrypty mają „na sztywno” wpisane samo „php coś tam” i trzeba będzie niestety je zedytować przed uruchomieniem.

Nie przedłużając, oto gotowa recepta.

Po zalogowaniu na SSH musisz zejść „niżej” w strukturze katalogów, wyjść ze swojego konta. Najlepiej „cd /„. Binarka PHP w wersji 5.3 znajduje się tutaj: „./usr/local/php5.3/bin/php„. Zamiast wpisywać „php skrypt.php” musisz wpisywać „./usr/local/php5.3/bin/php ./home/twoje_konto/domains/twoja_domena/public_html/skrypt.php„.

Próbowałem zrobić symboliczny link aby chociaż trochę skrócić ścieżki ale niestety, nie powiodło się. Tam gdzie mam uprawnienia do tworzenia linków, tam nie zadziała ta binarka PHP. Trzeba zejść niżej, wyjść z własnego konta. A tam znowu nie mam już uprawnień…

Gdy była chwila spokoju, napisałem zapytanie do supportu. Potwierdzili to co sam znalazłem, dodając jedną wskazówkę:

jezeli chce pan uzyc swojego php.ini to komenda

/usr/local/php5.3/bin/php -c /usr/local/directadmin/data/users/lastdeal/php/lastdeal.pl/php.ini skrypt.php

Mam nadzieję, że ten wpis zaoszczędzi komuś trochę czasu i nerwów :)


Ł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!