Skip to main content

Hướng dẫn chạy Cron jobs trong Drupal 9

Giới thiệu Cron trong Drupal 

Một tiện ích thực thi các lệnh theo khoảng thời gian đã định được gọi là "cron jobs".

Theo drupal.org “Một“ cron job ”là một hành động được kích hoạt theo thời gian thường được thực hiện (và hiệu quả nhất) bởi máy chủ lưu trữ của trang web của bạn, nhưng cũng có thể được định cấu hình bởi một dịch vụ từ xa hoặc thậm chí từ máy tính để bàn của chính bạn”.

Làm thế nào cron job có thể được thực hiện trong Drupal

Drupal 9 cung cấp một Automated Cron module. Đây là một công cụ tích hợp là bộ lập lịch tác vụ dựa trên thời gian. Bản thân tên cho biết Tự động có nghĩa là không cần tham gia Thủ công ngoài thiết lập ban đầu.

Theo mặc định, cron này được đặt để chạy 3 giờ một lần. Chúng ta có thể thay đổi nó cho phù hợp hàng giờ, hàng ngày, hàng tuần theo yêu cầu. Chúng ta thậm chí có thể thay đổi biểu mẫu cài đặt và thêm các khoảng thời gian định kỳ của riêng mình.

Hướng dẫn thêm một custom cron job vào Drupal

hook_cron: hook này được kích hoạt bất cứ khi nào Drupal cron chạy. Vì vậy, chúng tôi có thể xác định nhiệm vụ của chúng tôi bên trong này.

Ví dụ: tôi muốn kiểm tra xem có bất kỳ node nào chưa được xuất bản hay không, tôi muốn xuất bản chúng mỗi khi cron chạy.

<?php 
/**
* file example.module
*/

/**
 * Implements hook_cron().
 */
function example_cron() {
   $query = \Drupal::entityQuery('node');
  $query->condition('status', 0);
  $query->condition('type', 'article');
  $entity_ids = $query->execute();
  foreach ($entity_ids as $entity_id) {
    $node = Node::load($entity_id);
    $node->setPublished();
    $node->save();
  }
}

Để thực thi lệnh cron, bạn có thể dùng UI admin thông qua link example.com/admin/config/system/cron

Hạn chế của cron job Drupal

  • Trong trường hợp chúng ta có nhiều mô-đun triển khai hook_cron, các mô-đun này chạy đồng thời theo thứ tự bảng chữ cái hoặc theo trọng lượng mô-đun. Điều này làm tăng thêm sức nặng cho một yêu cầu trang tại một thời điểm.
  • Nếu một cron dẫn đến lỗi, điều này sẽ dừng cron đang chạy và cron sẽ không xử lý các cron còn lại cho đến khi nó được giải quyết. Ngoài ra, rất khó để tìm ra ai là thủ phạm.
  • Nếu chúng ta muốn tối ưu hóa thời gian chạy cron, chúng ta nên phân tích lần chạy cron nào tốn nhiều thời gian hơn.

Để khắc phục tất cả những hạn chế này, Drupal cung cấp cho chúng ta các mô-đun như Super cron, Elysia cron, Ultimate cron, v.v. Tất cả các mô-đun này là một hoặc giống nhau với nhiều tính năng được bổ sung. Các đặc điểm chung của module này: 

  • Không chạy theo thứ tự từng caía một mà chúng chạy song song . Vì vậy, ngay cả khi có lỗi xảy ra với một tác vụ cron, tác vụ còn lại sẽ thực thi độc lập với nhau
  • Mỗi loại có thể có một cấu hình riêng biệt. vì vậy tôi có thể nói chạy công việc cron A cứ sau 1 giờ, cron công việc B cứ sau 2 giờ. ...
  • Mỗi cron có log riêng
Image
multiple cronjobs