Поскольку жизнь — боль, то баги встречаются часто… Поставив Gearman на Debian заметил, что конфиг не учитывается демоном, поэтому решил написать как патчить gearman, чтобы демон учитывал конфиги. Сейчас конфиги полностью игнорируются.
Для начала поставим сам gearman:
# apt-get install gearman
Меняем конфиг (например, будем хранить очередь в MySQL):
nano /etc/default/gearman-job-server
Меняем значение PARAMS на такое:
PARAMS="--listen=localhost \ -q mysql \ --mysql-host=localhost \ --mysql-port=3306 \ --mysql-user=db_user \ --mysql-password=db_pass \ --mysql-db=db_name \ --mysql-table=db_table"
Перезагружаем сервис:
# service gearman-job-server restart
Смотрим с какими параметрами запущен демон:
# ps aux | grep gearman gearman 24946 0.0 2.7 68304 6856 ? Ssl 11:24 0:00 /usr/sbin/gearmand --pid-file=/var/run/gearman/gearmand.pid --user=gearman --daemon --log-file=/var/log/gearman-job-server/gearman.log --listen=localhost
Как видим, данные с конфига не используются. Будем лечить пациента… Хорошо, что есть добрые люди и есть багтрекер, где подняли эту проблему и написали её решение.
# nano /etc/init/gearman-job-server.conf
Находим строку:
exec start-stop-daemon --start --chuid gearman --exec /usr/sbin/gearmand -- --log-file=/var/log/gearman-job-server/gearman.log
заменяем на:
# PATCH: https://bugs.launchpad.net/ubuntu/+source/gearmand/+bug/1260830 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
Но этого еще не всё. Грохнем файл сервиса.
# rm /lib/systemd/system/gearman-job-server.service # systemctl daemon-reload
Перезапускаем демона:
# service gearman-job-server restart
Проверяем с какими параметрами запущен демон:
# ps aux | grep gearman gearman 24946 0.0 2.7 68304 6856 ? Ssl 11:24 0:00 /usr/sbin/gearmand --pid-file=/var/run/gearman/gearmand.pid --user=gearman --daemon --log-file=/var/log/gearman-job-server/gearman.log --listen=localhost -q mysql --mysql-host=localhost --mysql-port=3306 --mysql-user=db_user --mysql-password=db_pass --mysql-db=db_name --mysql-table=db_table
Готово. Успехов! 🙂
27 марта, 2016