与 Supervisord 一起运行时 Gearman 不工作

与 Supervisord 一起运行时 Gearman 不工作

我正在专用作业服务器(Ubuntu 12.04)上为我的 PHP 项目测试 Gearman(使用 pecl/gearman 作为 PHP 实现)。

手动操作可以正常工作:启动客户端、添加作业并在单独的 shell 中运行一个或多个工作器,一切按预期进行。现在我想使用 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 上返回结果。任何帮助都非常感谢。

答案1

在几乎完全相同的服务器堆栈中遇到了相同的错误,并找到了解决方案。出现警告和错误是因为您尝试将作业发送给未注册的工作人员。检查您的工作人员的名称,并在命令行上使用 ps -ax 检查其是否正在运行。

在命令行上使用 gearmand -f 将作业发送给不存在的 worker 将不会给您任何反馈。使用 pecl 模块执行此操作会导致错误。

附言:我知道您已经放弃了并且使用 Beanstalkd 但也许它可以帮助其他人。

相关内容