2010-08-23 25 views
6

Từ những gì tôi có thể thấy Gearman không hỗ trợ công việc đã lên lịch hoặc công việc bị trì hoãn. Tôi đã nghĩ rằng có lẽ công việc theo lịch trình có thể được xếp hàng trong at đầu tiên và sau đó được thêm vào hàng đợi Gearman sau khi khoảng thời gian at hết hạn.Lên lịch công việc trong Gearman cho một ngày và giờ cụ thể

at tác vụ liên tục khi chúng được ghi dưới dạng tệp vào thư mục trong thư mục ống chỉ của máy chủ. Vì vậy, cổ chai duy nhất có khả năng sẽ là một kịch bản đơn giản để thêm nhiệm vụ vào hàng đợi Gearman vì không thể phân phối at trên các máy chủ. Chuyển nó cho Gearman để xử lý công việc thực tế có nghĩa là tôi có thể đăng nhập công việc đúng cách, v.v.

Đây có phải là cách tốt nhất để tiếp cận điều này và bạn có ý tưởng thay thế nào không?

Lý do tôi chọn Gearman so với các giải pháp xếp hàng khác là nó có phần mở rộng PHP.

Mã tôi đang viết được sử dụng để duy trì hàng đợi các email cần được gửi đi. Vì vậy, tôi có thể chỉ định rằng tôi muốn gửi email tới [email protected] vào lúc 9.50 vào thứ Sáu chẳng hạn.

+6

Điều này là do chúng ta Đức, chúng tôi làm công việc của chúng tôi ngay lập tức * *. Chúng tôi không cần lập kế hoạch. –

+1

Rất buồn cười! Có vẻ như tất cả các câu hỏi của Gearman đều bị riffed theo cách này. – Treffynnon

+2

@Treffynnon yeah, họ mời họ .... Họ thường xuyên đặt đúng cách ("Làm thế nào để ngăn chặn một công nhân thợ rèn", "giết công nhân thợ bánh răng với một lệnh" ....) :) –

Trả lời

2

Tôi đã quyết định đi theo tuyến đường at như được trình bày ban đầu trong câu hỏi của mình. Với mục đích tôi đã viết một gói PHP nhỏ cho mã nhị phân at và thử nghiệm nó trên Ubuntu. Nếu bạn quan tâm, nó có thể được tìm thấy trên github: http://github.com/treffynnon/PHP-at-Job-Queue-Wrapper

1

Một giải pháp khá hacky, chỉ hoạt động tốt ở độ phân giải hàng giờ hoặc hàng ngày sẽ làm cho tên công việc (chức năng) chứa ngày bạn muốn gửi . Sau đó, có nhân viên bắt đầu trong cron mỗi giờ hoặc ngày để đăng ký cho những công việc.

Ví dụ: nếu bạn muốn gửi email lúc 9 giờ sáng vào Thứ Hai ngày 12 tháng 3 năm 2012, hãy thêm công việc vào hàng đợi có tên như email_2012-03-12_09: 00. Sau đó, có một công việc cron chạy hàng giờ, chạy một nhân viên đăng ký bất kỳ công việc nào phù hợp với email_ + ngày giờ hiện tại.

Như tôi đã nói, có thể hoàn toàn khả thi, nhưng khá đáng sợ!

UPDATE 1: tôi thấy gần đây rằng các tài liệu cho gearmand database persistence nay đề cập đến một lĩnh vực tên when_to_run mà là một INT, và khả năng có thể giữ một kỷ nguyên dấu thời gian unix. Trường này dường như không được tham chiếu trong mã.

0

Nếu bạn đang sử dụng Zend ...

SlmQueue là một lớp công việc hàng đợi trừu tượng. Nó cho phép bạn dễ dàng sử dụng các hệ thống xếp hàng công việc trong một ứng dụng Zend Framework 2. Qua đó nó không bắt buộc bạn phải sử dụng cụ thể một loại hàng đợi công việc. Bạn có thể viết mã và công việc của bạn độc lập với hệ thống cơ bản. Điều này cho phép sự linh hoạt tuyệt vời và tách các hệ thống.

https://github.com/juriansluiman/SlmQueue

Các vấn đề liên quan