有什么方法可以访问Gearman管理吗?
我希望能够查询齿轮工服务器以确定我运行了多少个工作线程实例(基本上,我想确保该实例可用,并且如果没有工作线程处理这些任务,则可用,我希望能够发送警报。RunTaskA
RunTaskB
有什么办法可以做到这一点吗?
另外:疯狂的道具,如果你知道一种PHP方法来查询齿轮兵服务器。
编辑:我知道本地可用的PHP gearman扩展,但我不是在寻找任务提交扩展,我需要一些东西来让我查询gearman服务器并查看有多少工人正在执行特定任务。
我希望能够查询齿轮工服务器以确定我运行了多少个工作线程实例(基本上,我想确保该实例可用,并且如果没有工作线程处理这些任务,则可用,我希望能够发送警报。RunTaskA
RunTaskB
有什么办法可以做到这一点吗?
另外:疯狂的道具,如果你知道一种PHP方法来查询齿轮兵服务器。
编辑:我知道本地可用的PHP gearman扩展,但我不是在寻找任务提交扩展,我需要一些东西来让我查询gearman服务器并查看有多少工人正在执行特定任务。
class Waps_Gearman_Server {
/**
* @var string
*/
protected $host = "127.0.0.1";
/**
* @var int
*/
protected $port = 4730;
/**
* @param string $host
* @param int $port
*/
public function __construct($host=null,$port=null){
if( !is_null($host) ){
$this->host = $host;
}
if( !is_null($port) ){
$this->port = $port;
}
}
/**
* @return array | null
*/
public function getStatus(){
$status = null;
$handle = fsockopen($this->host,$this->port,$errorNumber,$errorString,30);
if($handle!=null){
fwrite($handle,"status\n");
while (!feof($handle)) {
$line = fgets($handle, 4096);
if( $line==".\n"){
break;
}
if( preg_match("~^(.*)[ \t](\d+)[ \t](\d+)[ \t](\d+)~",$line,$matches) ){
$function = $matches[1];
$status['operations'][$function] = array(
'function' => $function,
'total' => $matches[2],
'running' => $matches[3],
'connectedWorkers' => $matches[4],
);
}
}
fwrite($handle,"workers\n");
while (!feof($handle)) {
$line = fgets($handle, 4096);
if( $line==".\n"){
break;
}
// FD IP-ADDRESS CLIENT-ID : FUNCTION
if( preg_match("~^(\d+)[ \t](.*?)[ \t](.*?) : ?(.*)~",$line,$matches) ){
$fd = $matches[1];
$status['connections'][$fd] = array(
'fd' => $fd,
'ip' => $matches[2],
'id' => $matches[3],
'function' => $matches[4],
);
}
}
fclose($handle);
}
return $status;
}
}
为了快速检查,我使用这个bash单行:
# (echo status ; sleep 0.1) | netcat 127.0.0.1 4730
这将打开与在本地主机上运行的齿轮工实例的连接,并发送“状态”查询。这包含该实例上的作业的名称和数量。然后可以使用 grep/awk/wc 等处理信息,以进行报告和警报。
我也对“workers”查询执行相同的操作,该查询显示所有连接的 worker。
# (echo workers ; sleep 0.1) | netcat 127.0.0.1 4730
睡眠是使连接保持打开足够长的时间以进行回复。
管理命令的完整列表以及输出的含义位于 http://gearman.org/index.php?id=protocol 只需搜索“管理协议”