gearman и постоянное хранилище PostgreSQL

В новой версии gearman поменялся синтаксис для подключения PostgreSQL хранилища в качестве persistent backend. В частности большинство руководств оперирует оператором -q libpq. Попытки запустить gearman версии 1.0.6 с указанной комбинацией приведет к ошибке

  ERROR 2013-12-11 14:21:45.985137 [  main ] Unknown queue libpq initialize(UNKNOWN_OPTION) -> libgearman-server/queue.cc:214

Для корректной работы необходимо использовать -q postgres или --queue-type=postgres. Например,

/usr/sbin/gearmand --queue-type=postgres --libpq-conninfo='host=localhost user=gearman password=passoword dbname=gearman' --libpq-table=queue

Приключения продолжаются. Разработчики заботливо позаботились о том, чтобы нам не пришлось править скрипты инициализации. О чем свидетельствуют строчки в /etc/default/gearman-job-server:

# This is a configuration file for /etc/init.d/gearman-job-server; it allows
# you to perform common modifications to the behavior of the gearman-job-server
# daemon startup without editing the init script (and thus getting prompted by
# dpkg on upgrades).  We all love dpkg prompts.

В последних версиях скрипт инициализации видоизменили и теперь он использует upstart. Однако зависимость /etc/default/gearman-job-server забыли подключить. Таким образом сервис будет запускаться всегда как

exec start-stop-daemon --start --chuid gearman --exec /usr/sbin/gearmand -- --log-file=/var/log/gearman-job-server/gearman.log

Идеальным вариантом является сборка локального пакета с необходимыми модификациями upstart сценария. Для флегматиков можно предложить дождаться включения необходимых изменений в основной пакет. Для холериков можно предложить вариант модификации /etc/init/gearman-job-server.conf на месте. Для этого необходимо привести его к следующему виду

# -*- upstart -*-

# Upstart configuration script for "gearman-job-server".

description "gearman job control server"

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

respawn

script
    . /etc/default/gearman-job-server
    exec start-stop-daemon --start --chuid gearman --exec /usr/sbin/gearmand -- $PARAMS --log-file=/var/log/gearman-job-server/gearman.log
end script

Из-за особенностей экранирования не получится просто указать в конфигурационном файле /etc/default/gearman-job-server следующую настройку (ссылка на обсуждение):

# РАБОТАТЬ НЕ БУДЕТ!
PARAMS="--queue-type=postgres --libpq-conninfo='host=localhost user=gearman password=passoword dbname=gearman' --libpq-table=queue"

В качестве обходного варианта можно использовать переменные окружения

export PGHOST=localhost
export PGUSER=gearman
export PGPASSWORD=password
export PGDATABASE=gearman
PARAMS="--queue-type=postgres --libpq-table=queue"

Добавить комментарий

Ваш e-mail не будет опубликован.