2010-07-31 8 views
12

Tôi có một số khách hàng bánh răng gửi một công việc, nói job1.Làm cách nào để có được số lượng công việc xếp hàng đợi của một loại cụ thể trong bộ điều khiển?

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

Mất 10 giây để xử lý công việc này. Tôi muốn theo dõi xem có bao nhiêu công việc 'job1' đang chờ một công nhân làm việc với họ tại bất kỳ thời điểm nào. Làm thế nào tôi có thể làm điều đó?

Trả lời

30

đối với việc kiểm tra nhanh chóng, tôi sử dụng này bash một lót của bạn:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730 

này mở ra một kết nối đến một trường hợp gearman chạy trên localhost, và gửi trạng thái truy vấn. Điều này chứa tên và số lượng công việc trên cá thể đó. Thông tin sau đó có thể được xử lý với grep/awk/wc vv để báo cáo và cảnh báo.

Tôi cũng làm như vậy với truy vấn công nhân hiển thị tất cả công nhân được kết nối.

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730 

Ngủ là giữ kết nối mở đủ lâu để trả lời.

Danh sách đầy đủ các lệnh quản trị và ý nghĩa của kết quả đầu ra là http://gearman.org/protocol/. Chỉ cần tìm kiếm "Giao thức quản trị".

+1

Chỉ cần tò mò: tại sao giấc ngủ 0,1 cần thiết? Lệnh tương đương cho ví dụ memcached không cần ngủ. – mjs

+0

Tôi đã phải sử dụng nc thay vì netcat nhưng nếu không làm việc tuyệt vời! – Nate

1

Dường như không có bất kỳ cách nào tức thời để nhận thông tin này.

Dưới đây là một vài tùy chọn. Đầu tiên, if you can grab job handles as you create them (tìm kiếm "Nói về kiểm tra trạng thái"), bạn có thể lưu trữ chúng ở một số vị trí trung tâm và truy vấn chúng từ bất kỳ ứng dụng khách nào.

Thứ hai, bạn có thể đặt máy chủ Gearman của mình để sử dụng persistent queues và sau đó tự chạy truy vấn với hàng đợi. Điều này có thể là dễ dàng hơn và sạch hơn trong hai tùy chọn.

+0

+1 cho việc sử dụng hàng đợi dai dẳng: điều này cũng cho phép để có một kiểm soát tốt hơn trên hàng đợi –

1

Gearmand có giao diện telnet bạn có thể truy vấn. (chi tiết chính xác của giao thức có thể được tìm thấy trên trang web bánh răng - http://gearman.org/?id=protocol)

Tôi đã sử dụng mã này ở đây làm điểm bắt đầu để tự xoay. https://github.com/liorbk/php/blob/master/GearmanTelnet.php (mã này là hoàn toàn tốt của chính nó và bạn sẽ có thể giảm sử dụng nó ra khỏi hộp)

Đó là một ít so với giải pháp khá nhưng cho đến khi một người nào đó cải thiện giao diện quản trị gearman vì vậy bạn có thể nói chuyện trực tiếp qua PHP hay viết một plugin cho nó, bạn đang ở trên của riêng

12

Để mở rộng câu trả lời của d5ve, hãy thêm thông số -w để "hết thời gian" kết nối netcat của bạn, nếu không bạn không bao giờ quay lại lời nhắc lệnh.

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

Tôi không thể đề xuất thay đổi một ký tự, nhưng việc sử dụng # làm ký tự nhắc làm cho trình phân tích cú pháp hiểu dòng mã là nhận xét và làm mờ nó. – bschlueter

4
telnet localhost 4730 
status 

worker_name total_queue currently_running number_of_workers 
job1   1   1     9 
+0

Cảm ơn bạn đã giải thích cột – Aleksey