Bạn muốn đọc qua bài viết sau đây có sẵn trực tiếp từ trang web MagentoC Commerce bao gồm tất cả những gì bạn cần biết về chức năng cron & Magento:
Magento - Wiki - Cách thiết lập công việc định kỳ
Để làm nổi bật: Hoạt động bên trong
Cơ chế Magront crontab được kích hoạt định kỳ bằng cách sử dụng công việc cron hệ thống. Cuộc gọi được bắt đầu trong tệp cron.php:
<?php
// initialize configuration and load event observers only from /crontab/ section
Mage::getConfig()->init()->loadEventObservers('crontab');
// initialize crontab event area
Mage::app()->addEventArea('crontab');
// dispatch 'default' event for observers specified in crontab configuration
Mage::dispatchEvent('default');
Trình tự này sẽ gọi Mage_Cron_Model_Observer→dispatch()
, lần lượt sẽ:
- thực hiện các nhiệm vụ theo lịch trình
- tạo các nhiệm vụ theo lịch trình trong tương lai nếu cần
- làm sạch lịch sử của các nhiệm vụ theo lịch trình
Nhiệm vụ được lên lịch cho mỗi lần công việc cần được chạy dựa trên
<schedule><cron_expr>0 1 * * *</cron_expr></schedule>
biểu thức và được lưu trữ trong bảng cron_schedule. Mỗi bản ghi bao gồm các trường sau:
schedule_id
- định danh duy nhất cho nhiệm vụ theo lịch trình
job_code
- định danh công việc từ cấu hình
status
- có thể là một trong pending, running, success, missed, error
messages
- văn bản tùy chỉnh được báo cáo theo phương thức được thực thi bởi công việc
created_at
- ngày / giờ khi tác vụ được tạo tại
scheduled_at
- ngày / giờ khi tác vụ được lên kế hoạch thực hiện
executed_at
- ngày / giờ khi tác vụ thực sự được thực thi (null trước khi thực hiện)
finished_at
- ngày / giờ khi tác vụ kết thúc thực hiện (null trước khi thực hiện)
Khi lịch biểu được tạo, status
được đặt thành pending
, created_at
đến now()
và scheduled_at
nhắm mục tiêu ngày / giờ.
Khi lịch trình chờ xử lý được thực thi, status
được đặt thành running
và executed_at
thành now()
.
Khi tác vụ theo lịch trình kết thúc thành công, status
được đặt thành success
và finished_at
thành now()
.
Khi tác vụ theo lịch trình đã đưa ra một ngoại lệ, status
được đặt thành lỗi và finished_at
thành now()
.
Nếu tình trạng công việc là pending
và scheduled_at
cũ hơn “nhỡ nếu không chạy trong” giá trị cấu hình, tình trạng được thiết lập để missed
.