web-dev-qa-db-ja.com

Gearman Job Server / Ubuntu

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にさえもかじってみましたが、そこには喜びがなかったので、デバッグするのは難しいです。

4
Phil Sturgeon

問題は、デーモンがパブリックIPではなく127.0.0.1/ローカルループバックをリッスンしていることです。

これは、Ubuntuの/ etc/default/gearman-job-serverで指定されています。

マシンのパブリックIPに変更し、initスクリプトを使用してデーモンを再起動すると、すべて正常に動作するはずです。

7
Tom Hudson

通常、このエラーはGearmanClient :: addServer()のパラメーターが原因で発生します。パラメータとしての「localhost」は好きではありません。 127.0.0.1を指定するか、何も指定しないでください。

2
Rich H.