Я тестирую Gearman на выделенном сервере заданий (Ubuntu 12.04) для моего проекта PHP (используя pecl / gearman в качестве имплементации PHP).
Вручную это работает нормально: запуск клиента, добавление заданий и запуск одного или нескольких воркеров в отдельных оболочках работает должным образом. Теперь я хочу запустить рабочие процессы с помощью Supervisord, но это приводит к появлению множества следующих ошибок в журнале Gearman:
WARNING [ 4 ] lost connection to client recv(peer has closed connection) 127.0.0.1:37126 -> libgearman-server/io.cc:608
ERROR [ 4 ] Failed while in _connection_read() -> libgearman-server/io.cc:489
Конфигурация супервизора по умолчанию, я только что добавил программу:
[program:migration]
command=/path/to/script
process_name=%(program_name)s_%(process_num)02d
numprocs=10
stdout_logfile=/var/log/gearman.log
stderr_logfile=/var/log/gearman-error.log
stdout_logfile_maxbytes=1MB
environment=GEARMAN_USER=gearman
autostart=true
autorestart=true
user=gearman
stopsignal=KILL
Информация о процессе Gearman:
gearman 9802 0.0 0.0 476116 1780 ? Ssl 12:18 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=127.0.0.1
При тестировании супервайзер:
supervisord -n -c /etc/supervisor/supervisord.conf
Я как бы застрял здесь, так как сообщение об ошибке действительно не возвращает результаты в Google. Любая помощь приветствуется.
Произошла та же ошибка почти в том же стеке серверов и нашла решение. Предупреждение и ошибка появляются, потому что вы пытаетесь отправить задание незарегистрированному работнику. Проверьте имя своего воркера и с помощью ps -ax в командной строке проверьте, запущен ли он.
Отправка задания несуществующему исполнителю в командной строке с помощью gearmand -f не даст вам никакой обратной связи. Выполнение этого с использованием модуля pecl приводит к ошибке.
PS: Я знаю, что вы уже спрыгнули с корабля и пошли вместе с Бинстолкдом, но, возможно, это поможет кому-то другому.