Tôi đang gặp khó khăn trong việc thiết lập công việc Cron để chạy mỗi ngày một lần vào một thời điểm nhất định. Đây là những gì tôi có trong cấu hình mô-đun của tôi:Cron của Magento có thiếu sót về cơ bản không?
<crontab>
<jobs>
<sorting_flushcache>
<schedule><cron_expr>0 16 * * *</cron_expr></schedule>
<run><model>sorting/observer::flushProductCacheCron</model></run>
</sorting_flushcache>
</jobs>
</crontab>
Từ những gì tôi biết về công việc cron, mà nên chạy lúc 5 giờ chiều dựa trên múi giờ địa phương của tôi. Tuy nhiên, nó KHÔNG BAO GIỜ hoạt động. Thay vào đó, nếu tôi đặt cron_expr thành * 16 * * *
, nó sẽ lên lịch mỗi phút cho toàn bộ giờ (như bạn mong đợi).
Tôi truy tìm thông qua mã và tôi nghĩ rằng tôi đã tìm thấy sự cố nhưng tôi không biết đủ về lịch biểu cron và cách thực hiện thực sự là vì vậy tôi hy vọng ai đó có thể giúp tôi hiểu điều gì sai và cách để công việc của tôi hoạt động.
Mage_Cron_Model_Schedule là bộ não của con thú. Khi đoạn mã cron.php được gọi bởi lịch biểu crontab của máy chủ, nó gửi đi một sự kiện mà lớp này bắt và thực hiện công việc của nó. Trong số những thứ khác nó kéo trong cấu hình và cố gắng lên lịch cho các công việc cron sắp tới. Bên trong public function trySchedule($time)
nó gọi là matchCronExpression
, chuyển cho nó phần biểu thức cron được đề cập cùng với giá trị của thời gian hiện tại tương ứng với phần biểu thức cron đó. Ví dụ: nó so sánh phần đầu tiên của cron_expr (số phút một phần) vào phút của dấu thời gian hiện tại. Vào cuối của matchCronExpression
chức năng nó sẽ trả về một giá trị boolean như vậy:
return ($num>=$from) && ($num<=$to) && ($num%$mod===0);
Trong trường hợp của tôi, tôi cron_expr là 0 16 * * *
. Vì tôi không có bất kỳ phạm vi nào hoặc */5
loại nội dung cho phần của tôi phút, nó so sánh giá trị chính xác mà tôi đã đặt dựa trên giá trị chính xác của dấu thời gian hiện tại. Điều này có nghĩa là nó sẽ CHỈ trả về true nếu nó xảy ra để chạy kịch bản cron vào đúng phút mà công việc này nên được lên lịch.
Một lần nữa, tôi không phải là một chuyên gia cron nhưng điều này dường như không phù hợp với tôi. Làm thế nào, sau đó, là một trong những nghĩa vụ phải lên lịch một công việc để chạy một lần một ngày nếu bạn không thể dự đoán chính xác phút mà lịch trình cron sẽ chạy kịch bản? Tôi thực sự hy vọng tôi đang thiếu một cái gì đó ... bất cứ ai có thể giúp đỡ?
- CRON CONFIG INFO -
generate schedules every: 5
schedule ahead for: 10
missed if not run within: 20
success history lifetime: 60
failure history lifetime: 600
Múi giờ máy chủ, không phải múi giờ địa phương của bạn. – hakre
Dù sao, đó không phải là vấn đề. Như tôi đã đề cập trong bài viết của tôi, nếu tôi thay đổi nó thành '* 16 * * *' nó hoạt động .... vì vậy nó không phải là ngữ nghĩa trong đó múi giờ tôi đã nói tôi dựa trên nó. Tôi chỉ đơn giản là không làm việc. – BrianVPS
Có vẻ như bị hỏng. Nhưng những gì tôi đọc, chất lượng mã của magneto không tốt. có lẽ chỉ là một cái gì đó shitbacked với nhau để đẩy phát hành và làm cho nó trông sexy để được bán nhanh chóng. – hakre