Gearmanをインストールし、ジョブを実行して渡すことはまったく問題ありませんが、次のコマンドを使用して手動でジョブキューを起動した場合に限ります。
/usr/sbin/gearmand -p 4730 -vvvv -u gearman
これを行うと、別のEC2インスタンスがワーカーとして実行され、3番目のインスタンスがジョブを渡します。完璧ですが、端末を開いたままにしたり(明らかに)画面をいじったりする必要はありません。これを起動時に実行したいと思います。
そう:
$ 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スクリプトで参照されていました)。私はそれを作成し、gearman:gearmanにさえもかじってみましたが、そこには喜びがなかったので、デバッグするのは難しいです。
問題は、デーモンがパブリックIPではなく127.0.0.1/ローカルループバックをリッスンしていることです。
これは、Ubuntuの/ etc/default/gearman-job-serverで指定されています。
マシンのパブリックIPに変更し、initスクリプトを使用してデーモンを再起動すると、すべて正常に動作するはずです。
通常、このエラーはGearmanClient :: addServer()のパラメーターが原因で発生します。パラメータとしての「localhost」は好きではありません。 127.0.0.1を指定するか、何も指定しないでください。