私には、job1などのジョブを送信するギアマンクライアントが多数います。
$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');
このジョブの処理には、たとえば10秒かかります。ある時点でワーカーが作業するのを待っている「job1」ジョブの数を追跡したいと思います。どうやってやるの?
すばやく確認するために、このbashワンライナーを使用します。
(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/protocol/にあります。「管理プロトコル」を検索するだけです。
d5veの答えを拡張するには、-wパラメータを追加してnetcat接続を「タイムアウト」します。そうしないと、コマンドプロンプトに戻ることができません。
$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1
telnet localhost 4730
status
worker_name total_queue currently_running number_of_workers
job1 1 1 9
mod-gearmangearman_top
の一部であるを使用します。
Webサイトからの出力例:
+-----------------------+--------+-------+-------+---------+
| 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 |
+-----------------------+--------+-------+-------+---------+
この情報をすぐに入手する方法はないようです。
ここにいくつかのオプションがあります。まず、ジョブハンドルを作成するときに取得できる場合(「ステータスの確認について」を検索)、それらを中央の場所に保存して、任意のクライアントからクエリを実行できます。
次に、永続キューを使用するようにGearmanサーバーを設定してから、自分でキューに対してクエリを実行できます。これは、2つのオプションの中でより簡単でクリーンな場合があります。
Gearmandには、クエリ可能なTelnetインターフェイスがあります。(プロトコルの正確な詳細は、ギアマンのWebサイト(http://gearman.org/?id=protocol )にあります)
私はここでこのコードを自分自身を転がすための出発点として使用しました。 https://github.com/liorbk/php/blob/master/GearmanTelnet.php (このコードはそれ自体で完全に優れており、箱から出してすぐに使用できるはずです)
これはあまり良い解決策ではありませんが、誰かがギアマンの管理インターフェースを改善して、PHPを介して直接話すか、プラグインを作成するまでは、あなたは自分でやっています
Ubuntu 18.04ではgearadmin
、gearmanパッケージとともにバイナリがデフォルトでインストールされています。
gearadmin --help
gearadmin --status
netcatの代わりに使用できます:
gearadmin --status
queue1 334 10 10
そしてワンライナー:
while :; do gearadmin --status; sleep 1; done