2010-07-31 25 views
12

我有一些派遣人員發送工作,比如job1。如何獲得齒輪工中特定類型的排隊作業數量?

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

需要10秒來處理這項工作。 我想跟蹤有多少'job1'工作正在等待工人在任何給定時間工作。我怎樣才能做到這一點?

回答

30

爲了快速檢查,我使用bash的一行代碼:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730 

這將打開到本地主機上運行的Gearman實例的連接,併發送狀態查詢。這包含該實例的作業名稱和數量。然後可以使用grep/awk/wc等來處理該信息以用於報告和警報。

我也是這樣做的工人查詢顯示所有連接的工人。

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730 

睡眠是爲了保持連接打開足夠長的時間來回復。

管理命令的完整列表以及輸出的含義是http://gearman.org/protocol/。只需搜索「管理協議」即可。

+1

只是好奇更好的控制:爲什麼需要睡眠0.1?等效命令例如memcached不需要睡眠。 – mjs 2011-12-02 11:47:41

+0

我不得不使用nc而不是netcat,但在其他方面效果很好! – Nate 2012-10-24 16:46:39

1

它看起來不像有任何直接的方法來獲取此信息。

這裏有幾個選項。首先,if you can grab job handles as you create them(搜索「說到檢查狀態」),可以將它們存儲在一些中心位置,並從任何客戶端查詢它們。

其次,您可以將您的Gearman服務器設置爲使用persistent queues,然後對自己的隊列運行查詢。這可能是兩個選項中更簡單和更清潔的選項。

+0

+1使用持久性的隊列:這也允許對隊列 – 2014-11-06 11:56:20

1

Gearmand有一個telnet界面,你可以查詢。 (協議的確切細節可以在齒輪人網站上找到 - http://gearman.org/?id=protocol

我在這裏使用這段代碼作爲我自己的起點。 https://github.com/liorbk/php/blob/master/GearmanTelnet.php (此代碼是非常好的本身,你應該能夠刪除使用它的開箱)

這是一個不到漂亮的解決方案,但直到有人提高Gearman的管理界面,您可以通過PHP直接對話或它寫一個插件,你是你自己的

12

要擴展d5ve的答案,添加一個-w參數來「超時」您的netcat連接,否則您永遠不會回到命令提示符。

$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1 
+0

我不能提出一個字符更改,但使用#作爲提示字符會使解析器將該行代碼解釋爲註釋,並使其變暗。 – bschlueter 2016-06-14 02:15:22

4
telnet localhost 4730 
status 

worker_name total_queue currently_running number_of_workers 
job1   1   1     9 
+0

感謝專欄解釋 – Aleksey 2017-06-19 16:13:26