我有Gearman安装,运行和传递作业完全正常,但只有当我手动启动作业队列与此命令:
/usr/sbin/gearmand -p 4730 -vvvv -u gearman
如果我这样做,我有另一个EC2实例作为工作人员运行,第三个作业传递。 完美,但我不想让terminal打开(显然)或弄乱屏幕。 我想这个在启动时运行。
所以:
$ 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
失败!
我也注意到没有任何东西进入日志文件(它不是自动创build的,但在安装时在init.d脚本中被引用)。 我试图创造它,甚至对齿轮人说:齿轮人,但没有喜悦,所以这是很难debugging。
问题是守护进程正在监听127.0.0.1/local环回,而不是公网IP。
这是在Ubuntu上的/ etc / default / gearman-job-server中指定的。
将其更改为机器的公共IP,使用init脚本重新启动守护程序,一切正常。
通常,这个错误是由于GearmanClient :: addServer()中的参数引起的。 它不喜欢“localhost”作为参数。 尝试指定127.0.0.1或不指定任何内容。