14

我有许多齿轮工客户发送一份工作,比如 job1。

$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');

处理这项工作需要 10 秒钟。我想跟踪在任何给定时间有多少“job1”工作正在等待工人处理。我怎样才能做到这一点?

4

7 回答 7

31

为了快速检查,我使用这个 bash one-liner:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730

这将打开与在 localhost 上运行的 gearman 实例的连接,并发送状态查询。这包含该实例上作业的名称和数量。然后可以使用//等处理信息以grep进行报告awkwc警报。

我也对显示所有已连接工作人员的工作人员查询执行相同操作。

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730

睡眠是为了保持连接打开足够长的时间来回复。

管理命令的完整列表以及输出的含义位于http://gearman.org/protocol/。只需搜索“管理协议”。

于 2011-01-25T13:19:58.573 回答
12

要扩展 d5ve 的答案,请添加 -w 参数以“超时”您的 netcat 连接,否则您将永远无法返回命令提示符。

$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1
于 2011-04-29T21:43:55.837 回答
9
telnet localhost 4730
status

worker_name total_queue currently_running number_of_workers
job1         1          1                 9
于 2016-01-19T04:02:00.440 回答
3

我使用gearman_top,它是mod-gearman的一部分。

网站的示例输出:

+-----------------------+--------+-------+-------+---------+
| Name                  | Worker | Avail | Queue | Running |
+-----------------------+--------+-------+-------+---------+
| check_results         | 1      | 1     | 0     | 0       |
| host                  | 3      | 3     | 0     | 0       |
| service               | 3      | 3     | 0     | 0       |
| eventhandler          | 3      | 3     | 0     | 0       |
| servicegroup_jmx4perl | 3      | 3     | 0     | 0       |
| hostgroup_japan       | 3      | 3     | 0     | 0       |
+-----------------------+--------+-------+-------+---------+
于 2018-03-12T16:41:17.230 回答
1

看起来没有任何直接的方法可以获取此信息。

这里有几个选项。首先,如果您可以在创建作业句柄时获取它们(搜索“说到检查状态”),您可以将它们存储在某个中心位置并从任何客户端查询它们。

其次,您可以将 Gearman 服务器设置为使用持久队列,然后自己对队列运行查询。这可能是两个选项中更容易和更清洁的。

于 2010-07-31T17:33:31.643 回答
1

Gearmand 有一个可以查询的telnet 接口。(协议的详细信息可以在 gearman 网站上找到 - http://gearman.org/?id=protocol

我在这里使用此代码作为滚动我自己的代码的起点。 https://github.com/liorbk/php/blob/master/GearmanTelnet.php (此代码本身非常好,您应该可以直接使用它)

这是一个不太漂亮的解决方案,但除非有人改进了 gearman 管理界面,以便您可以直接通过 PHP 交谈或为其编写插件,否则您只能靠自己

于 2011-01-20T10:27:25.073 回答
0

在 Ubuntu 18.04 上,我gearadmin默认安装了带有 gearman 包的二进制文件。

gearadmin --help
gearadmin --status可以用来代替 netcat 替代方案:

gearadmin --status
queue1    334     10      10

还有一个衬里:
while :; do gearadmin --status; sleep 1; done

于 2019-08-06T14:02:07.400 回答