Tóm lược
Thông báo lỗi bạn đang thấy sẽ xảy ra nếu đáp ứng hai điều kiện sau:
- Công việc cron của bạn không hoàn thành (lỗi) hoặc mất hơn 4 phút để hoàn thành;
- Bạn gọi cron thường xuyên hơn cứ sau 4 phút (Theo cài đặt crontab của bạn, không phải cài đặt trong Drupal)
Do đó, thông báo lỗi này là một triệu chứng của các tác vụ cron bị lỗi hoặc mất quá nhiều thời gian để chạy. (Lưu ý: Tôi nhận ra rằng bạn đã tìm thấy thủ phạm, nhưng tôi muốn thêm câu trả lời cho những người tìm thấy trang này thông qua các tìm kiếm, như tôi đã làm)
Lý lịch
Điều đầu tiên cần hiểu là làm thế nào các nhiệm vụ cron Drupal được chạy. Cron Drupal được gọi theo định kỳ - thông qua công việc định kỳ trên máy chủ của bạn hoặc sau mỗi lần tải trang nếu bạn sử dụng cron của người nghèo là mặc định của Drupal.
Tuy nhiên, các tác vụ cron không nhất thiết phải chạy mỗi khi cron được gọi - tuy nhiên, có một cài đặt trong Drupal (mặc định là 3 giờ) cho biết tần suất các tác vụ cron nên được chạy. Nhưng sự chậm trễ 3 giờ này chỉ áp dụng nếu các tác vụ cron đã kết thúc thành công.
Trong Drupal 7, cron sử dụng các cơ chế khóa của Drupal , cung cấp một hệ thống khóa tư vấn hợp tác. Một trong những tính năng của hệ thống khóa này là khóa hết hạn sau một thời gian nhất định. Trong trường hợp của cron, nó sẽ hết hạn sau 4 phút - vì vậy nếu cron của bạn được gọi cứ sau 3 phút và công việc cron trước đó chưa kết thúc vào thời điểm đó (có thể bị hỏng hoặc rất chậm), bạn thực sự sẽ nhận được thông báo lỗi này .
Thực tế là bạn đặt cron cứ sau 12 giờ không tạo ra sự khác biệt - vì nhiệm vụ cron Drupal không thành công / mất quá nhiều thời gian, Drupal cho rằng nó đã không được chạy nên cố gắng chạy lại ngay khi cron được gọi. Việc trì hoãn mười hai giờ chỉ áp dụng cho các lần chạy cron thành công.
Biến cron semaphore không còn tồn tại nữa trong Drupal 7 - đây là phiên bản cũ của Drupal. Trong Drupal 7 không có cách nào đáng tin cậy để phát hành khóa theo cách thủ công, vì phụ trợ khóa có thể thay đổi - tuy nhiên nếu bạn đang sử dụng cơ chế khóa lõi thì bạn có thể giải phóng khóa cron bằng cách chỉnh sửa cơ sở dữ liệu:
DELETE FROM semaphore WHERE name = 'cron';
Nhưng bằng cách này, bạn sẽ chỉ khắc phục được các triệu chứng - vấn đề cần giải quyết là tại sao cron bị lỗi / mất quá nhiều thời gian để chạy.