Gearman 作业服务器 / Ubuntu

Gearman 作业服务器 / Ubuntu

我已经安装了 Gearman,可以完美地运行和传递作业,但只有当我使用此命令手动启动作业队列时才可以:

/usr/sbin/gearmand -p 4730 -vvvv -u gearman 

如果我这样做,我会有另一个 EC2 实例作为工作程序运行,第三个实例传递作业。完美,但我不想让终端保持打开状态(显然)或乱搞屏幕。我希望它在启动时运行。

所以:

$ ps aux | grep gearman
gearman    745  0.2  0.2   8096  1388 ?        Ss   19:11   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

我觉得这很好。但是当我告诉我的工作人员进行连接时:

$ php workers/resize.php 
Waiting for job...
PHP Warning:  GearmanWorker::work(): gearman_connection_flush:write:111 in /home/ubuntu/workers/resize.php on line 20

失败!

我还注意到日志文件中没有任何内容(它不是自动创建的,而是在安装时在此 init.d 脚本中引用的)。我尝试创建它,甚至将 chown 设置为 gearman:gearman,但没有任何效果,因此很难进行调试。

答案1

问题在于守护进程正在监听 127.0.0.1/local 环回而不是公共 IP。

这是在 Ubuntu 上的 /etc/default/gearman-job-server 中指定的。

将其更改为机器的公共 IP,使用 init 脚本重新启动守护进程,一切都会好起来。

答案2

通常,此错误是由于 GearmanClient::addServer() 中的参数引起的。它不喜欢将“localhost”作为参数。请尝试指定 127.0.0.1 或不指定任何内容。

相关内容