Gearman is a queuing system that has been in Debian for a long time and is quite reliable.
I ran into problems however when upgrading a server from Debian squeeze to wheezy however. Here's how I debugged my Gearman setup.
Log verbosity
First of all, I started by increasing the verbosity level of the daemon by adding --verbose=INFO
to /etc/default/gearman-job-server
(the possible values of the verbose
option are in the libgearman documentation) and restarting the daemon:
/etc/init.d/gearman-job-server restart
I opened a second terminal to keep an eye on the logs:
tail -f /var/log/gearman-job-server/gearman.log
Listing available workers
Next, I registered a very simple worker:
gearman -w -f mytest cat
and made sure it was connected properly by telneting into the Gearman process:
telnet localhost 4730
and listing all currently connected workers using the workers
command (one of the commands available in the Gearman TEXT protocol).
There should be an entry similar to this one:
30 127.0.0.1 - : mytest
Because there are no exit
or quit
commands in the TEXT protocol, you need to terminate the telnet connection like this:
- Press Return
- Press Ctrl + ]
- Press Return
- Type
quit
at the telnet prompt and press Return.
Finally, I sent some input to the simple worker I setup earlier:
echo "hi there" | gearman -f mytest
and got my input repeated on the terminal:
hi there
Gearman bug
I traced my problems down to this error message when I sent input to the worker:
gearman: gearman_client_run_tasks : connect_poll(Connection refused)
getsockopt() failed -> libgearman/connection.cc:104
It turns out that it is a known bug that was fixed upstream but still affects Debian wheezy and some versions of Ubuntu. The bug report is pretty unhelpful since the work-around is hidden away in the comments of this "invalid" answer: be explicit about the hostname and port number in both gearman calls.
So I was able to make it work like this:
gearman -w -h 127.0.0.1 -p 4730 -f mytest cat
echo "hi there" | gearman -h 127.0.0.1 -p 4730 -f mytest
where the hostname matches exactly what's in /etc/default/gearman-job-server
.
Hi
I'm using OMD 1.10 and did not find gearman-job-server, but this solved this problem for me: renaming "localhost" for ::1 to "localhost6" in /etc/hosts
first try:
after renaming localhost:
hth!
Regards, Stefan