Gearman Job Server / 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 при установке). Я попытался создать его и даже покушать на шестерёнку: шестерёнку, но радости нет, поэтому сложно отлаживать.
2 ответа
Проблема заключается в том, что демон прослушивает 127.0.0.1/local loopback, а не общедоступный IP-адрес.
Это указано в /etc/default/gearman-job-server в Ubuntu.
Измените его на публичный IP-адрес компьютера, перезапустите демон с помощью сценария инициализации, и все должно быть в порядке.
Обычно эта ошибка возникает из-за параметра в GearmanClient::addServer(). Он не любит "localhost" в качестве параметра. Попробуйте указать 127.0.0.1 или не указывать ничего.