Ostatnio trafiłem na ciekawą usługę, która pozwala oddelegować długo trwające zadania z usługi webowej. Mowa o Gearman’ie. Usługa jest o tyle ciekawa że nie narzuca ani języka dla klienta (większość popularnych ma gotowe biblioteki), ani język dla skryptów w tej usłudze nie jest narzucany. Można tę usługę wykorzystać jako most pomiędzy PHP a np. Javą/Pythonem lub do zlecenia zadań z serwera na Linux’ie do wykonania na serwerze Windowsowym (bo np. narzędzia dostępne są tylko dla Windowsa). O innych zaletach można poczytać na stronce więc nie będę przynudzać.
Standardowo zainstalowałem paczkę z repo Debiania i rozbiłem się przy kompilacji modułu z PECL’a - w repo była jakaś prehistoryczna wersja. Postanowiłem uruchomić aktualną wersje 1.0.6 z gałęzi testowej przekompilowując ją na Wheezym (by uniknąć zależności z wersji testowej).

Instalacja gearman’a

Dorzucamy źródła z testing - dzięki temu nie aktualizujemy systemu ale będziemy mogli pobrać świeże paczki źródłowe:

echo "deb-src http://ftp.pl.debian.org/debian jessie main non-free contrib" >> /etc/apt/sources.list
apt-get update

Przygotowujemy katalog roboczy, pobieramy paczki i kompilujemy:

mkdir gearman
cd gearman

apt-get build-dep gearman-job-server -y
apt-get install bzr
apt-get source gearman-job-server
cd gearmand-1.0.6
./debian/rules clean
./debian/rules binary
cd ..
dpkg -i gearman-job-server_1.0.6-2_i386.deb gearman-tools_1.0.6-2_i386.deb libgearman-dev_1.0.6-2_i386.deb libgearman7_1.0.6-2_i386.deb
apt-get install -f -y

Musiałem ręcznie doinstalować bazar (paczka bzr), bo w czasie kompilacji pojawiały się błędy z tym poleceniem - nie jestem pewien na ile jest potrzebne ale oczywiście możemy to posprzątać po skompilowaniu paczek.
P.S. Jestem przekonany że zamiast “rules clean/binary” jest jakieś polecenie, którego powinno się użyć ale nie mogłem sobie go przypomnieć…

Instalacja modułu dla PHP'a

Ponieważ wcześniej zainstalowaliśmy aktualne biblioteki libgearman-dev to instalacja modułu dla PHP powinna być bardzo prosta:

pecl install gearman
echo "extension=gearman.so" > /etc/php5/conf.d/gearman.ini

P.S. W paczkach PHP 5.3 z dotdeb’a można znaleźć już skompilowany moduł dla gearman’a.

Na razie tyle - muszę teraz poszukać jak w wygodny, zautomatyzowany sposób zarządzać skryptami zleconymi do gearman’a.