Intereting Posts

Любой способ получить доступ к администрации Gearman?

Я хочу, чтобы иметь возможность запросить сервер ретранслятора, чтобы определить, сколько экземпляров рабочего я работаю (в основном я хочу убедиться, что RunTaskA доступен, и RunTaskB доступен, если нет рабочих, которые обрабатывают эти задачи, я хочу быть в состоянии для отправки оповещения.

Есть какой-либо способ сделать это?

Кроме того: Mad реквизиты, если вы знаете PHP-способ запросить сервер ретранслятора.

Изменить : я знаю о расширении механизма передачи PHP, которое доступно изначально, но я не ищу расширения для представления задачи, мне нужно что-то, что позволяет мне запрашивать сервер ретранслятора и посмотреть, сколько рабочих обслуживает определенную задачу.

 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; } } 

Для быстрой проверки я использую этот однострочный баш:

 # (echo status ; sleep 0.1) | netcat 127.0.0.1 4730 

Это открывает соединение с экземпляром ретранслятора, работающим на локальном хосте, и отправляет запрос статуса. Он содержит имя и количество заданий в этом экземпляре. Затем информацию можно обработать с помощью grep / awk / wc и т. Д. Для отчетности и оповещения.

Я также делаю то же самое с «рабочим» запросом, который показывает всех связанных работников.

 # (echo workers ; sleep 0.1) | netcat 127.0.0.1 4730 

Сон состоит в том, чтобы держать соединение открытым достаточно долго для ответа.

Полный список административных команд и средства вывода находятся по адресу http://gearman.org/index.php?id=protocol. Просто найдите «Административный протокол»,

Чтобы расширить ответ на d5ve, поскольку netcat будет сидеть и ждать в сокете, вы можете добавить параметр -w с максимальным количеством секунд для запуска. Поэтому, если вы запрашиваете localhost:

 # (echo status ; sleep 0.1) | netcat 127.0.0.1 4730 -w 1 

… иначе вы никогда не вернетесь в командную строку.

Насколько я знаю, в gearman нет такого расширения, ответственность за выполнение сценария и контроль над работником – это ваша ответственность, вы можете попробовать один из них для этой цели –

Supervisord – приложение python для запуска приложения в фоновом режиме и мониторинга.

ИЛИ вы можете использовать диспетчера передач Брайан Луны

Я думаю, вам нужно это http://github.com/liorbk/php

У Gearman есть расширение php . Вы уже изучили это?

Ссылка PHP

Наткнувшись на него сегодня, он не проверял его сам, но выглядит многообещающим.

https://github.com/yugene/Gearman-Monitor

В Python вы можете сделать следующее:

 import gearman admin_client = gearman.GearmanAdminClient(['127.0.0.1:4730',]) status = admin_client.get_status() for w in status: if w["task"] == "YOUR_TASK_NAME": print(w) 

Примечание : вам нужно установить пакет с именем «gearman» с помощью pip или easy_install, чтобы избежать исключений, выполняющих вышеуказанный код.

Кроме того, проверьте следующие клиенты-клиенты, которые упрощают администрирование ретранслятора в целом.

  • Мониторинг и администрирование серверов Gearman легко из интерфейса на основе Django
  • Инструмент мониторинга для серверов Gearman
  • PHP-демона для управления рабочими
  • Панель мониторинга PHP для серверов заданий Gearman
  • http-сервер, который находится на вершине ретранслятора

Когда все остальное не удается, вы можете использовать инструмент gearadmin , найденный в gearman-tools в Ubuntu, вызвав exec() чтобы выполнить его в новом процессе. Вот ссылка на его выходной формат .

Это предполагает, что PHP и Gearman работают на одном сервере.