我已经安装了 Gearman,运行和传递作业非常好,但仅当我使用以下命令手动启动作业队列时:
/usr/sbin/gearmand -p 4730 -vvvv -u gearman
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我有另一个 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
Run Code Online (Sandbox Code Playgroud)
在我看来很好。但是当我告诉我的工作人员连接时:
$ 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
Run Code Online (Sandbox Code Playgroud)
失败!
此外,我注意到日志文件中没有任何内容(它不是自动创建的,而是在安装时在此 init.d 脚本中引用的)。我尝试创建它,甚至 chowning 给 gearman:gearman 但那里没有乐趣,所以很难调试。
问题是守护进程正在侦听 127.0.0.1/local loopback 而不是公共 IP。
这是在 Ubuntu 上的 /etc/default/gearman-job-server 中指定的。
将其更改为机器的公共 IP,使用 init 脚本重新启动守护程序,一切都应该没问题。