Kịch bản cron nào là tốt nhất để chạy? cron.php hoặc cron.sh


27

Magento cung cấp hai tập lệnh cron trong thư mục gốc của nó, cron.php và cron.sh.

Cái nào tốt hơn để chạy và tại sao?

Câu trả lời:


31

Tốt nhất nên chạy cron.sh

Kể từ Magento EE 1.13.x và CE 1.8.x, cơ chế cron đã thay đổi trong đó Magento đã giới thiệu chức năng chế độ lập lịch mới.

Có 2 chế độ khả dụng: 1. mặc định - chạy các crons theo lịch trình. 2. luôn luôn - Như tên đã nói, các tác vụ này sẽ được thực hiện vô điều kiện mỗi khi cron được kích hoạt và không cần một lịch trình được xác định rõ ràng.

Về cơ bản cron.php được gọi mà không có bất kỳ tham số nào sử dụng shell_exec để thực thi hai quy trình của cron.sh. Mỗi người có một tham số khác nhau Lần lượt Cron.sh chuyển tham số này trở lại cron.php, sau đó thực thi cron. Trong nội bộ Magento sử dụng cơ sở hạ tầng sự kiện của mình để xử lý hai chế độ bằng cách gửi các sự kiện với các tên mặc định là Thay đổi và và luôn luôn. Mage_Cron sau đó thực hiện hai phương thức quan sát viên.

Nhìn vào cron.php, bạn sẽ thấy việc sử dụng hàm PHP shell_exec. Ngoài việc là một mối quan tâm bảo mật, chức năng có thể trả về NULL cả khi xảy ra lỗi hoặc chương trình không tạo ra đầu ra. Không thể phát hiện lỗi thực thi bằng chức năng này. Điều này có nghĩa là tại bất kỳ thời điểm nào khi tập lệnh / mã của bạn bị lỗi do lỗi, điều sau đây xảy ra: 1. Cronjob trở nên cũ, 2. Không có lỗi nào được ghi lại, 3. và không ai biết rằng bất kỳ điều này đã xảy ra.

Để khắc phục điều này, cần thêm các cronjob sau:

*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default
*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always

Điều này sẽ đảm bảo rằng các chế độ xử lý sẽ luôn chạy mà không sử dụng hàm PHP shell_exec dự phòng và cron không nên trở nên cũ vì một ngoại lệ được đưa ra nếu xảy ra lỗi.


Chỉ cần thêm rằng biểu thức cron mẫu ở trên là khá chung chung. www-datasẽ thay đổi thành bất cứ điều gì người dùng chạy các quy trình máy chủ web. Cũng đáng lưu ý rằng đối với nhiều thiết lập lưu trữ CPanel / WHM, shell_exec()sẽ bị vô hiệu hóa.
pspahn

*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default */5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=alwaysvà các lệnh này đưa ra lỗi "lệnh không tìm thấy" bởi nupur walia
Amit Bera

Nếu bạn gặp lỗi đó, thì bạn cần kiểm tra 3 điều: 1) Dữ liệu www là người dùng chính xác trên máy chủ đó có thể chạy quy trình này, thay đổi nó thành bất cứ điều gì của người dùng. 2) kiểm tra vị trí của sh, vì vậy hãy chạy "which sh" và nó sẽ xuất vị trí, điều này sẽ thay thế "/ bin / sh" nếu đó là một đường dẫn khác. 3) cuối cùng kiểm tra xem đường dẫn đến cron.sh trên thực tế có đúng không.
Shaughn

@AmitBera Tôi đã nhận được thông báo lỗi tương tự và không thể làm cho nó hoạt động với dữ liệu www, root hoặc bất kỳ người dùng nào khác. Tôi thực sự đã bỏ qua người dùng và bây giờ nó hoạt động, vì vậy*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Michael

@Shaughn bạn có thể giải thích sử dụng chế độ mặc định và luôn luôn là gì không?
Rohan Hapani
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.