我有一些齿轮工作的客户发送工作,比如job1。
$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');
处理这项工作需要10秒钟。 我想跟踪有多少'job1'工作等待工人在任何给定时间工作。我怎么能这样做?
答案 0 :(得分:31)
为了快速检查,我使用这个bash one-liner:
(echo status ; sleep 0.1) | netcat 127.0.0.1 4730
这将打开与localhost上运行的gearman实例的连接,并发送 status 查询。它包含该实例上的作业的名称和数量。然后,可以使用grep
/ awk
/ wc
等处理这些信息,以便进行报告和提醒。
我也对 workers 查询做了同样的事情,该查询显示了所有连接的工作者。
(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730
睡眠是为了保持连接打开足够长的时间以便回复。
管理命令的完整列表,以及输出在http://gearman.org/protocol/处的含义。只需搜索“管理协议”。
答案 1 :(得分:12)
要扩展d5ve的答案,请添加-w参数以“超时”你的netcat连接,否则你永远不会回到命令提示符。
$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1
答案 2 :(得分:5)
telnet localhost 4730
status
worker_name total_queue currently_running number_of_workers
job1 1 1 9
答案 3 :(得分:2)
我使用的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 |
+-----------------------+--------+-------+-------+---------+
答案 4 :(得分:1)
看起来没有任何直接的方式来获取此信息。
以下是一些选项。首先,if you can grab job handles as you create them(搜索“说到检查状态”),您可以将它们存储在某个中心位置,并从任何客户端查询它们。
其次,您可以将Gearman服务器设置为使用persistent queues,然后自己对队列运行查询。这可能是两个选项中更容易和更清晰的。
答案 5 :(得分:1)
Gearmand有一个可以查询的telnet接口。 (协议的具体细节可以在gearman网站上找到 - http://gearman.org/?id=protocol)
我在这里使用此代码作为滚动我自己的起点。 https://github.com/liorbk/php/blob/master/GearmanTelnet.php (这段代码本身非常好,你应该能够开箱即用)
这不是一个漂亮的解决方案,但是直到有人改进了gearman管理界面,所以你可以通过PHP直接交谈或为它编写插件,你就可以自己了
答案 6 :(得分:0)
在Ubuntu 18.04上,我默认安装了gearadmin
二进制文件和gearman软件包。
gearadmin --help
可以使用gearadmin --status
代替netcat替代方法:
gearadmin --status
queue1 334 10 10
还有一个班轮:
while :; do gearadmin --status; sleep 1; done