Chạy bộ lập lịch tác vụ tập lệnh php
Lập lịch tác vụ song song cho PHP sử dụng MongoDB làm hàng đợi phân phối. Thực hiện các nhiệm vụ song song một cách dễ dàng. Thư viện này có hỗ trợ tích hợp cho các hệ thống cụm và cpu đa lõi. Bạn có thể khởi động nhiều nút công nhân và chúng sẽ cân bằng tải các công việc có sẵn với nguyên tắc đến trước phục vụ trước. Mỗi nút cũng sẽ sinh ra một số tiến trình con có thể định cấu hình (động) để sử dụng tất cả các tài nguyên có sẵn. Hơn nữa, có thể lên lịch công việc vào những thời điểm nhất định, khoảng thời gian vô tận cũng như sắp xếp lại nếu công việc thất bại. Điều này mang đến một triển khai trong thế giới thực để quản lý quy trình song song cho PHP. Bạn cũng có thể đồng bộ hóa các tác vụ con và nhiều nội dung hay hơn nữa Show
Đặc trưng
v4Đây là tài liệu cho phiên bản chính v4 hiện tại. Bạn có thể xem hướng dẫn nâng cấp nếu muốn nâng cấp từ phiên bản v3 hoặc thậm chí là phiên bản cũ hơn. Tài liệu cho v3 có sẵn tại đây Mục lụcTại sao?PHP không phải là ngôn ngữ đa luồng và nó cũng không thể xử lý (hầu hết) các tác vụ không đồng bộ. Chắc chắn có pthreads và pcntl nhưng chúng chỉ có thể sử dụng được trong chế độ cli (hoặc chỉ nên được sử dụng ở đó). Sử dụng thư viện này, bạn có thể viết các tác vụ có thể được thực thi song song bởi cùng một hệ thống hoặc bất kỳ hệ thống nào khác Nó hoạt động như thế nào (Làm ơn đi đường ngắn)?Một công việc được lên lịch thông qua bộ lập lịch tác vụ và được ghi vào hàng đợi tin nhắn trung tâm (MongoDB). Tất cả các nút Hàng đợi sẽ được thông báo trong thời gian thực (mềm) rằng có một công việc mới. Nút hàng đợi sẽ chuyển tiếp công việc thông qua hàng đợi tin nhắn systemv nội bộ tới trình quản lý công nhân. Người quản lý công nhân quyết định xem có cần tạo công nhân mới hay không. Cuối cùng, một công nhân sẽ thực hiện nhiệm vụ theo nguyên tắc đến trước phục vụ trước. Nếu không có chỗ trống nào, công việc sẽ đợi trong hàng đợi và được thực hiện ngay khi có chỗ trống. Một công việc có thể được lên lịch lại nếu nó thất bại. Có rất nhiều tính năng có sẵn, tiếp tục đọc Yêu cầu
Tải xuốngGói có sẵn tại packagist Để cài đặt gói thông qua trình soạn thảo thực thi
Nhật ký thay đổiMột thay đổi có sẵn ở đây Đóng gópChúng tôi rất vui vì bạn muốn đóng góp cho dự án này. Vui lòng làm theo các điều khoản nhất định Điều kiệnBạn có thể gặp các thuật ngữ sau trong readme này hoặc ở nơi khác TermClassDescriptionScheduler$mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);5Scheduler được sử dụng để thêm công việc, truy vấn công việc, xóa công việc và lắng nghe các sự kiện, nó là thành phần duy nhất bên cạnh các công việc (khác) thực sự được sử dụng trong ứng dụng chính của bạn. Công việc $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);6Việc triển khai công việc là nhiệm vụ thực tế mà bạn muốn thực hiện. Quy trình $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);7Bạn sẽ nhận được một quy trình sau khi thêm công việc, truy vấn công việc, v.v., quy trình về cơ bản là phần trên của quá trình thực hiện công việc của bạn. Nút hàng đợi $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);8Các nút hàng đợi xử lý các công việc có sẵn và chuyển tiếp chúng tới trình quản lý công nhân. Người quản lý công nhân_______1_______9Công việc của người quản lý công nhân là tạo ra những công nhân thực sự xử lý công việc. Ghi chú. Bản thân trình quản lý công nhân là một nhánh từ quy trình nút hàng đợi. Công nhân_______6_______0Công nhân là những người xử lý một công việc từ hàng đợi và thực sự làm công việc bạn đã nộp. Nhà máy công nhân $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());1Một nhà máy công nhân cần được bạn triển khai, nó sẽ tạo ra người quản lý công nhân và công nhân mới. Cluster-A cluster là một tập hợp nhiều nút xếp hàng. Một cụm không cần phải được cấu hình theo bất kỳ cách nào, bạn có thể bắt đầu bao nhiêu nút hàng đợi tùy thích Cài đặtNếu ứng dụng của bạn được tạo bằng bộ chứa docker, bạn phải sử dụng ít nhất các tùy chọn bản dựng sau ________số 8_______ Tài liệuĐể hiểu rõ hơn về cách thức hoạt động của thư viện này, chúng ta sẽ triển khai một công việc thư. Tất nhiên bạn có thể thực hiện bất kỳ loại công việc nào Tạo công việcViệc tạo một tác vụ khá dễ dàng, bạn chỉ cần triển khai TaskScheduler\JobInterface. Trong ví dụ này, chúng tôi sẽ triển khai một công việc có tên là MailJob để gửi thư bằng zend-mail
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } } Khởi tạo bộ lập lịchBạn cần một phiên bản MongoDB\Database và một bộ ghi tương thích Psr\Log\LoggerInterface để khởi tạo bộ lập lịch $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); công việc ống chỉBây giờ, hãy để chúng tôi tạo một thư và triển khai nó tới bộ lập lịch tác vụ mà chúng tôi đã khởi tạo ngay trước đó $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString()); Đây là toàn bộ điều kỳ diệu, bộ lập lịch của chúng tôi hiện đã có công việc đầu tiên, thật tuyệt vời thực hiện công việcNhưng bây giờ chúng ta cần thực hiện các queued job đó Tạo nhà máy công nhânBạn sẽ cần tạo nhà máy nút công nhân của riêng mình trong không gian tên ứng dụng được gọi để sinh ra các quy trình con mới. Nhà máy này được gọi trong khi một ngã ba mới được sinh ra. Điều này có nghĩa là nếu nó được gọi, bạn đang ở trong một quy trình mới và bạn sẽ cần khởi động lại ứng dụng của mình từ đầu (Hoặc chỉ những thứ bạn cần cho một nhân viên)
Đối với cả người quản lý công nhân và công nhân, một ngã ba mới có nghĩa là bạn sẽ cần phải khởi động lại lớp từ đầu
Để hiểu rõ hơn. nếu có một tệp cấu hình mà bạn đã lưu trữ các cấu hình của mình như một MongoDB uri, trong nhà máy, bạn sẽ cần phân tích lại cấu hình này và tạo một phiên bản mongodb mới. Hoặc bạn có thể đang sử dụng thùng chứa PSR-11, thùng chứa cần được tạo từ đầu trong nhà máy (Cây phụ thuộc mới). Bạn có thể chuyển một thể hiện của dic (tương thích với Psr\Container\ContainerInterface) làm đối số thứ năm cho TaskScheduler\Worker (hoặc tùy chọn trình quản lý worker nâng cao làm đối số thứ ba cho TaskScheduler\WorkerManager (). Tìm hiểu thêm tại ) class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } } Tạo nút hàng đợiHãy để chúng tôi viết một nút hàng đợi mới. Nút hàng đợi phải được bắt đầu như một quá trình riêng biệt. Bạn nên cung cấp một cách dễ dàng để bắt đầu các nút xếp hàng như vậy, có nhiều cách để đạt được điều này. Cách dễ nhất là chỉ tạo một tập lệnh php duy nhất có thể bắt đầu qua cli $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger); Và sau đó bắt đầu phép thuật $queue->process();
Thư của chúng tôi được gửi ngay khi nút xếp hàng đang chạy và bắt đầu một số công nhân Thông thường, bạn muốn các nút đó luôn chạy. Chúng hoạt động giống như các nút thực thi vô hình phía sau ứng dụng của bạn quản lý công việcNhận việcBạn có thể muốn truy xuất tất cả các công việc đã lên lịch $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs(); Theo mặc định, bạn sẽ nhận được tất cả các công việc có trạng thái
Bạn có thể chuyển một truy vấn tùy chọn để truy vấn các công việc cụ thể FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg0 Hủy công việcCó thể hủy các công việc đang chờ trong hàng đợi cũng như hủy các công việc đang thực sự chạy FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg1 Nếu bạn hủy một công việc với trạng thái ĐANG XỬ LÝ, công việc đó sẽ bị hủy và dữ liệu của tôi bị hỏng. Bạn đã được cảnh báo. (Điều này tương tự khi công việc kết thúc với trạng thái TIMEOUT). Sự khác biệt duy nhất là một công việc hết thời gian chờ sẽ được lên lịch lại nếu nó đã thử lại > 0 hoặc có một khoảng thời gian được định cấu hình. Một công việc bị hủy sẽ không được lên lịch lại. Bạn sẽ cần tạo một công việc mới theo cách thủ công cho công việc đó sửa đổi công việcKhông thể sửa đổi công việc đã lên lịch theo thiết kế. Bạn cần hủy công việc và thêm một công việc mới
tuôn ra hàng đợiMặc dù không thể sửa đổi/xóa công việc nhưng có thể xóa toàn bộ hàng đợi
FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg2 Xử lý công việc thất bạiMột công việc được xác nhận là thất bại nếu công việc đưa ra một ngoại lệ dưới bất kỳ hình thức nào. Nếu chúng tôi xem lại công việc thư của mình, nhưng lần này nó sẽ đưa ra một ngoại lệ FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg3 Điều này sẽ dẫn đến một công việc KHÔNG THÀNH CÔNG ngay sau khi công việc này được thực thi
Bộ lập lịch có xử lý tích hợp các công việc không thành công. Bạn có thể chỉ định tự động lên lịch lại một công việc nếu nó không thành công. Phần sau đây sẽ lên lịch lại công việc tối đa 5 lần (Nếu nó kết thúc với trạng thái FAILED) với khoảng thời gian là 30 giây FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg4 Điều này sẽ xếp hàng thư của chúng tôi để được thực thi sau một giờ kể từ bây giờ và nó sẽ lên lịch lại công việc tối đa ba lần nếu nó không thành công trong khoảng thời gian một phút Ping còn sống và tiến độ công việcTaskScheduler có hỗ trợ tích hợp để cập nhật tiến độ công việc từ quá trình thực hiện công việc của bạn. Theo mặc định, một công việc bắt đầu từ $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 (%) và kết thúc với tiến độ $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());6 (%). Lưu ý rằng tiến độ là số nổi. Bạn có thể tăng tiến độ đạt được trong công việc của mình Quan trọng. Lưu ý rằng theo mặc định, bộ lập lịch sẽ nhận một công việc sau 30 giây là mồ côi và lên lịch lại cho nó. Bạn có thể thay đổi số 30 trên toàn cầu trong quá trình khởi tạo Trình lập lịch biểu hoặc tiếp tục gọi ____6_______7 trong quá trình thực hiện nhiệm vụ của mình. Việc gọi $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());8 có hoặc không có tiến trình hoạt động giống như một lệnh ping duy trì hoạt động cho bộ lập lịch và sẽ được gọi trong tác vụ của bạn nếu đó là một tác vụ chạy dài có vòng lặp. Nếu không có vòng lặp, bạn vẫn nên gọi phương thức này theo một số dạng khoảng thời gian để giữ cho tác vụ của bạn tồn tại. Không cần đặt tiến trình dưới dạng giá trị phần trăm, nếu không đặt, tác vụ sẽ tiếp tục ở mức 0% và đặt thành 100% nếu hoàn thành Chúng ta hãy xem nó hoạt động như thế nào với công việc sao chép tệp từ a sang b FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg5 Tiến trình hiện tại có thể có sẵn bằng cách sử dụng giao diện quy trình FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg6
lập trình không đồng bộHãy xem ví dụ này FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg7 Điều này sẽ buộc main() (Quy trình của bạn) đợi cho đến khi tác vụ 0 được thực thi. (Hoặc với trạng thái XONG, KHÔNG ĐẠT, ĐÃ HỦY, HẾT THỜI GIAN)Đây là ví dụ phức tạp hơn FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg8 Điều này sẽ đợi cả ba công việc hoàn thành trước khi tiếp tục Lưu ý quan trọng FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg9 Bạn cũng có thể chặn thời gian chờ nếu bất kỳ quy trình nào dẫn đến ngoại lệ class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }0 Lắng nghe các sự kiệnBạn có thể liên kết với bộ lập lịch và lắng nghe mọi thay đổi và thực hiện công việc. ) class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }1 Cũng có thể lọc các sự kiện như vậy, ví dụ này sẽ chỉ được thông báo cho các sự kiện xảy ra trong một công việc cụ thể class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }2
sự kiện ràng buộcBên cạnh phương thức nghe đơn giản cho Trình lập lịch biểu, bạn có thể liên kết các trình nghe sự kiện với $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);8 và/hoặc $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);5 của bạn Ví dụ class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }3
Bạn có thể liên kết người nghe với cùng một sự kiện trong các nút hàng đợi của mình class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }4
Sự kiệnBạn có thể ràng buộc cho các sự kiện sau ShortFullScopeDescription 6 7globalTriggers after a new job got added 8 9globalTriggers after a job has been postponedclass WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }0 class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }1globalTriggers after a job started to execute class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }2 class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }3globalTriggers after a job finished successfully class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }4 class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }5globalTriggers after a job failed class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }6 class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }7globalTriggers after a job timed out class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }8 class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }9globalTriggers after a job has been canceled $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger);0 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger);1queue node onlyTriggers after a queue node spawned a new worker $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger);2 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger);3queue node Trình phát sự kiện tùy chỉnhVề cơ bản, cả $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);8 và $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);5 đều sử dụng $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger);6 làm bộ phát sự kiện. Bạn có thể tạo cả hai phiên bản với phiên bản Trình tổ chức sự kiện giải đấu của riêng bạn class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }5 Tùy chọn công việc nâng caoTrình lập lịch tác vụ \ Trình lập lịch. addJob()/TaskScheduler\Scheduler. addJobOnce() cũng chấp nhận tùy chọn thứ ba (tùy chọn) cho phép bạn đặt các tùy chọn nâng cao hơn cho công việc $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger);7 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intChấp nhận thời gian unix cụ thể cho phép bạn chỉ định thời gian thực hiện công việc. Mặc định (0) là ngay lập tức hoặc tốt hơn là nói ngay khi có một vị trí miễn phí. $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $worker_factory = My\App\WorkerFactory(); #An instance of our previously created worker factory $queue = new TaskScheduler\Queue($scheduler, $mongodb, $worker_factory, $logger);9_______6_______5int Bạn có thể chỉ định khoảng thời gian công việc (tính bằng giây) hữu ích cho các công việc cần được thực hiện trong một khoảng thời gian cụ thể, ví dụ: dọn dẹp thư mục tạm thời. Giá trị mặc định là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 có nghĩa là không có khoảng thời gian nào cả, $queue->process();2 có nghĩa là thực hiện lại công việc ngay lập tức (Nhưng hãy cẩn thận với $queue->process();2, điều này có thể dẫn đến việc sử dụng nhiều cpu tùy thuộc vào công việc bạn đang thực hiện). Định cấu hình $queue->process();4 có nghĩa là công việc sẽ được thực hiện hàng giờ. $queue->process();5 $queue->process();6chuỗi Bạn có thể chỉ định nếu khoảng thời gian đề cập đến $queue->process();7 hoặc $queue->process();6 của công việc trước đó. Giá trị mặc định là $queue->process();6 có nghĩa là khoảng thời gian đề cập đến thời gian kết thúc của công việc trước đó. Khi bạn xác định $queue->process();7, khoảng thời gian đề cập đến thời gian bắt đầu của công việc trước đó. Điều này có thể hữu ích khi một công việc phải chạy vào những thời điểm cụ thể. $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();1_______6_______5intChỉ định khoảng thời gian thử lại nếu công việc không thực thi được. Giá trị mặc định là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 có nghĩa là không thử lại. Ví dụ: $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();4 có nghĩa là 2 lần thử lại. Bạn có thể đặt $queue->process();2 để thử lại vô tận. $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();6 $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();7int Tùy chọn này chỉ định thời gian (tính bằng giây) giữa các lần thử lại công việc. Mặc định là $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();7 tức là 5 phút. Hãy cẩn thận với tùy chọn này trong khi $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();6 là $queue->process();2, bạn có thể kết thúc bằng một vòng lặp thất bại. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg01 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());3boolBạn có thể chỉ định $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());2 cho tùy chọn này để sinh ra một công nhân mới chỉ cho nhiệm vụ này. Ghi chú. Tùy chọn này bỏ qua giá trị max_children của $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);9, có nghĩa là công nhân này luôn được sinh ra. Nó hoàn toàn hợp lý đối với các công việc thực hiện các cuộc gọi chặn, ví dụ như một trình nghe lắng nghe các thay đổi của hệ thống tệp cục bộ (inotify). Một công việc với tùy chọn được bật này sẽ chỉ tiêu tốn ít cpu/bộ nhớ nhất có thể. class WorkerFactory extends TaskScheduler\WorkerFactoryInterface { /** * {@inheritdoc} */ public function buildWorker(MongoDB\BSON\ObjectId $id): TaskScheduler\Worker { $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); return new TaskScheduler\Worker($id, $scheduler, $mongodb->mydb, $logger); } /** * {@inheritdoc} */ public function buildManager(): TaskScheduler\WorkerManager { $logger = new \A\Psr4\Compatible\Logger(); return new TaskScheduler\WorkerManager($this, $logger); } }6_______6_______5intChỉ định thời gian chờ tính bằng giây sẽ chấm dứt công việc sau khi hết thời gian nhất định bằng vũ lực. $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 mặc định có nghĩa là không có thời gian chờ nào cả. Công việc hết thời gian chờ sẽ được lên lịch lại nếu thử lại không phải là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 và sẽ được đánh dấu là đã hết thời gian chờ. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg09 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg10 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg11Chỉ định id công việc theo cách thủ công. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg12_______6_______3boolChỉ hữu ích nếu được đặt trong lệnh gọi addJobOnce(). Nếu $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());2 người lên lịch không so sánh dữ liệu công việc để quyết định xem công việc có cần được lên lịch lại hay không
Hãy để chúng tôi thêm lại ví dụ về công việc thư của chúng tôi với một số tùy chọn tùy chỉnh
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }6 Điều này sẽ xếp hàng thư của chúng tôi để được thực thi sau một giờ kể từ bây giờ và nó sẽ lên lịch lại công việc tối đa ba lần nếu nó không thành công trong khoảng thời gian một phút Thêm công việc nếu chưa cóNhững gì bạn cũng có thể làm là chỉ thêm công việc nếu nó chưa được xếp hàng đợi. Thay vì sử dụng FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg15, bạn có thể sử dụng FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg16, bộ lập lịch trình sau đó sẽ xác minh xem nó có cùng một công việc đã được xếp hàng chưa. Nếu không, công việc sẽ được thêm vào. Bộ lập lịch so sánh loại công việc ( FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg17 trong trường hợp này) và dữ liệu được gửi ( FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg18 trong trường hợp này)
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }7 Theo mặc định, FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg19 không so sánh loại công việc, dữ liệu đã gửi và trạng thái quy trình (ĐANG XỬ LÝ, CHỜ ĐỢI hoặc ĐÃ HOÃN). Nếu bạn không muốn kiểm tra dữ liệu, bạn có thể đặt FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg20 thành $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());2. Điều này sẽ yêu cầu bộ lập lịch chỉ lên lịch lại công việc của lớp đã cho nếu dữ liệu thay đổi. Điều này khá hữu ích nếu một công việc của lớp nhất định chỉ được xếp hàng một lần
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }8 Nếu max_age thay đổi, công việc cũ sẽ bị hủy và công việc mới sẽ được xếp vào hàng đợi. Nếu FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg20 không được đặt ở đây, chúng ta sẽ có hai công việc thuộc loại FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg23 class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }9 Tất nhiên, cũng có thể truy vấn công việc đó theo cách thủ công, hủy bỏ và lên lịch lại. Điều này sẽ đạt được như trên $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);0 Tùy chọn lập lịch trình nâng caoBạn có thể đặt các tùy chọn công việc đó làm mặc định chung cho toàn bộ lịch biểu. Các tùy chọn và giá trị mặc định tùy chỉnh có thể được đặt cho các công việc trong quá trình khởi tạo hoặc bằng cách gọi Trình lập lịch biểu. setOptions() $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);1 Bạn cũng có thể thay đổi các tùy chọn đó sau đó $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);2 NameDefaultTypeDescription_______8_______24 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg25stringBộ sưu tập MongoDB hoạt động như hàng đợi thông báo công việc. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg26 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg27intKích thước tối đa tính bằng byte của bộ sưu tập công việc, nếu đạt đến công việc đầu tiên sẽ bị ghi đè bởi công việc mới. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg28 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg29stringBộ sưu tập MongoDB hoạt động như hàng đợi thông báo sự kiện. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg30 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg31intKích thước tối đa tính bằng byte của bộ sưu tập sự kiện, nếu đạt đến thì sự kiện đầu tiên sẽ bị ghi đè bởi sự kiện mới. Giá trị này thường phải lớn hơn 5 lần so với giá trị của FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg26 vì một công việc có thể có nhiều sự kiện hơn. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg33_______8_______10?intXác định thời gian thực hiện mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Mặc định là ngay lập tức hoặc tốt hơn là nói ngay khi có một vị trí miễn phí. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg35 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intXác định khoảng thời gian mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Giá trị mặc định là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 có nghĩa là không có khoảng thời gian nào cả. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg38 $queue->process();6chuỗiXác định xem khoảng thời gian đề cập đến $queue->process();7 hay $queue->process();6 của công việc trước đó. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg42_______6_______5intXác định khoảng thời gian thử lại mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Không có thử lại theo mặc định cho các công việc không thành công. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg44_______16_______7int Tùy chọn này chỉ định thời gian (tính bằng giây) giữa các lần thử lại công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Mặc định là $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();7 tức là 5 phút. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg47 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intChỉ định thời gian chờ mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Theo mặc định, không có thời gian chờ nào cả
Tùy chọn quản lý công nhân nâng caoMặc dù bạn đã biết rằng bạn cần một nhà máy công nhân để sinh ra trình quản lý công nhân, nhưng bạn có thể chỉ định các tùy chọn nâng cao cho nó. Đây là nhân viên của chúng tôi, nhưng lần này chúng tôi chỉ định thêm một số tùy chọn $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);3 Xử lý công nhân được thực hiện bằng cách chỉ định tùy chọn FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg49 trong khi công nhân sinh sản động là chế độ mặc địnhNameDefaultTypeDescription_______8_______49 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg51stringBạn có thể thay đổi cách xử lý fork được thực hiện. Có ba chế độ. động, tĩnh, theo yêu cầu. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg52 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg53intSố tiến trình con tối thiểu. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg54 $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); $scheduler->getJobs();4intSố tiến trình con tối đa Chế độ quản lý quy trình ( FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg49)
Mặc định là FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg51. Thông thường FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg51 có ý nghĩa. Bạn có thể cần FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg59 trong thế giới được cung cấp vùng chứa trong khi số nút hàng đợi được xác định từ số lượng công việc chưa xử lý. Ví dụ: bạn có thể đang sử dụng Kubernetes autoscaling
Sử dụng PSR-11 DICTheo tùy chọn, người ta có thể chuyển Psr\Container\ContainerInterface cho các nút worker, sau đó được gọi để tạo các thể hiện công việc. Bạn có thể đã nhận được nó, nhưng đây là công nhân. Lần này, nó chuyển một thể hiện của bộ chứa PSR-11 tới các nút worker. Và nếu bạn đã sử dụng một vùng chứa thì hoàn toàn hợp lý khi yêu cầu người quản lý từ vùng chứa đó. (Tất nhiên, bạn cũng có thể yêu cầu một phiên bản worker từ nó nếu việc triển khai bộ chứa của bạn hỗ trợ các tham số trong thời gian chạy (Id worker). Ghi chú. Đây sẽ là một triển khai bộ chứa không tương thích từ thông số kỹ thuật PSR-11. ) $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);4 xử lý tín hiệuTất nhiên là có thể chấm dứt các nút hàng đợi. Họ thậm chí còn quản lý để sắp xếp lại các công việc đang chạy. Bạn chỉ cần gửi SIGTERM cho quy trình. Sau đó, nút hàng đợi sẽ truyền điều này đến trình quản lý công nhân trong khi trình quản lý công nhân sẽ gửi nó cho tất cả các công nhân đang chạy và họ sẽ lưu trạng thái của mình và thoát ra một cách dễ dàng. Một worker cũng lưu trạng thái của nó nếu worker process trực tiếp nhận được một SIGTERM. Nếu SIGKILL được sử dụng để chấm dứt nút hàng đợi (hoặc công nhân), trạng thái không thể được lưu và bạn có thể nhận các công việc zombie (Công việc có trạng thái XỬ LÝ nhưng không có công nhân nào thực sự xử lý các công việc đó). Không quản trị viên hệ thống tốt nào sẽ chấm dứt các công việc đang chạy bằng cách sử dụng SIGKILL, điều này không được chấp nhận và chỉ có thể được sử dụng nếu bạn biết mình đang làm gì Bạn cũng nên tránh sử dụng các hàm chặn không bao giờ kết thúc trong công việc của mình, php không thể xử lý các tín hiệu nếu bạn làm điều đó Làm cách nào để chạy tập lệnh PHP bằng Trình lập lịch tác vụ?Trả lời . Đăng nhập vào Plesk Chuyển đến Công cụ & Cài đặt > Tác vụ đã lên lịch > Thêm tác vụ; Tại Script Path, chỉ định đường dẫn đầy đủ đến tập lệnh PHP trên máy chủ. . Tại trường Run, chỉ định tần suất mong muốn mà tác vụ sẽ được chạy; Chọn Chạy tập lệnh PHP và đặt phiên bản bắt buộc Nhấn OK để lưu tác vụ Làm cách nào để tạo một công việc định kỳ để chạy tập lệnh PHP?Công việc định kỳ với PHP và loại tệp khác . PHP. Lệnh chạy cron job PHP5. php/home/tên người dùng/public_html/cron. php. . perl. Lệnh chạy CGI cron job. perl/home/tên người dùng/public_html/cgi-bin/tệp. làm ơn SSH. Lệnh chạy cron job shell script. /bin/sh/home/tên người dùng/public_html/tệp. sh mysql Làm thế nào để viết một lịch trình trong PHP?php'; . định cấu hình các công việc đã lên lịch (xem bên dưới). // Để bộ lập lịch thực hiện các công việc đến hạn. $scheduler->run(); . $scheduler = new Scheduler(); // .. configure the scheduled jobs (see below) .. // Let the scheduler execute jobs which are due. $scheduler->run(); Then add a new entry to your crontab to run scheduler.
Làm cách nào để tạo một tệp bó để chạy tập lệnh PHP?Thực thi tập lệnh php trong tệp bat . 1 trường hợp 1. Thực thi mã PHP trực tiếp 2 trường hợp 2. Thực thi tệp script PHP mà không truyền tham số 3 trường hợp 3. Thực thi tệp script PHP truyền tham số 4 Ví dụ về tập tin bat 5 Ví dụ về tệp bash 6 Tự động chạy tập lệnh PHP tại một thời điểm xác định 7 Khắc phục sự cố |