我有一些派遣人員發送工作,比如job1。如何獲得齒輪工中特定類型的排隊作業數量?
$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');
需要10秒來處理這項工作。 我想跟蹤有多少'job1'工作正在等待工人在任何給定時間工作。我怎樣才能做到這一點?
我有一些派遣人員發送工作,比如job1。如何獲得齒輪工中特定類型的排隊作業數量?
$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');
需要10秒來處理這項工作。 我想跟蹤有多少'job1'工作正在等待工人在任何給定時間工作。我怎樣才能做到這一點?
爲了快速檢查,我使用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/。只需搜索「管理協議」即可。
它看起來不像有任何直接的方法來獲取此信息。
這裏有幾個選項。首先,if you can grab job handles as you create them(搜索「說到檢查狀態」),可以將它們存儲在一些中心位置,並從任何客戶端查詢它們。
其次,您可以將您的Gearman服務器設置爲使用persistent queues,然後對自己的隊列運行查詢。這可能是兩個選項中更簡單和更清潔的選項。
+1使用持久性的隊列:這也允許對隊列 – 2014-11-06 11:56:20
Gearmand有一個telnet界面,你可以查詢。 (協議的確切細節可以在齒輪人網站上找到 - http://gearman.org/?id=protocol)
我在這裏使用這段代碼作爲我自己的起點。 https://github.com/liorbk/php/blob/master/GearmanTelnet.php (此代碼是非常好的本身,你應該能夠刪除使用它的開箱)
這是一個不到漂亮的解決方案,但直到有人提高Gearman的管理界面,您可以通過PHP直接對話或它寫一個插件,你是你自己的
要擴展d5ve的答案,添加一個-w參數來「超時」您的netcat連接,否則您永遠不會回到命令提示符。
$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1
我不能提出一個字符更改,但使用#作爲提示字符會使解析器將該行代碼解釋爲註釋,並使其變暗。 – bschlueter 2016-06-14 02:15:22
telnet localhost 4730
status
worker_name total_queue currently_running number_of_workers
job1 1 1 9
感謝專欄解釋 – Aleksey 2017-06-19 16:13:26
只是好奇更好的控制:爲什麼需要睡眠0.1?等效命令例如memcached不需要睡眠。 – mjs 2011-12-02 11:47:41
我不得不使用nc而不是netcat,但在其他方面效果很好! – Nate 2012-10-24 16:46:39