Tối ưu WP-Cron bằng WP Crontrol và linux’s cronjob

Mặc định WordPress sử dụng wp-cron để chạy các even, khi có một người khách vào site, nó tự động chạy wp-cron (tuy thế nó chỉ hoạt động khi trang được tải, back-end hoặc front-end) để kiểm tra các update như theme, plugin, hay như WP Rocket thì thường là tạo mới cache và database optimization hoặc 1 số yêu cầu post bài vào 1 thời điểm nào đó …

Tối ưu WP-Cron bằng WP Crontrol và cronjob

Tổng thế là thế, nhưng ở đây sẽ nảy sinh vài vấn đề

  1. Site bạn thời điểm cần chạy even lại không ai vào :]] Ví dụ bạn viết 1 bài viết, và hẹn nó sẽ được public vào 0h ngày 01/01/2018 để Happy New Year 2018 chẳng hạn, nhưng nếu lúc đó không ai vào, nó sẽ không chạy wp-cron, và bài viết đó sẽ treo ở đó cho tới khi có người vào site
  2. Cứ có khách vào, là nó lại chạy file wp-cron
    Việc này sẽ khiến truy cập của user bị chậm hơn do phải gánh chạy thêm cái wp-cron

Bạn có thể dùng WP Crontrol, cho phép bạn xem và kiểm soát những gì đang xảy ra trong hệ thống wp-cron, cần thiết thì sửa, xóa nó đi cho phù hợp với nhu cầu sử dụng, nhiều plugin bạn cài vào rồi kể cả xóa đi nhưng nó vẫn còn rác trong database và wp-cron, hãy xóa đi cho nhẹ bớt, bạn có thể tăng giảm thời gian chạy các even cho phù hợp nhu cầu, như chuyện check theme, plugin khi hệ thống đã ổn định, thì để 1-2 tháng check 1 lần là vừa, check nhiều quá cũng chẳng để làm gì …

Tất nhiên, bạn nên thay đổi những gì bạn hiểu, đừng vì cải thiện hiệu năng mà cái gì cũng chỉnh sang cả tháng khiến việc đồng bộ trên site bạn có vấn đề, cá nhân mình thì cũng chỉ xóa các even rác (do test plugin xong xóa đi nó vẫn còn lại) và tăng thời gian kiểm tra update plugin, theme, hay phiên bản WordPress mới nhất lên 1 tháng 1 lần thôi 😀 còn lại đa phần giữ mặc định cả

Mình không chắc là mình hiểu về wp-cron như thế có đúng không 😀 nhưng khi làm ngoirungdui.com mình cứ thấy nó nhanh hơn rất nhiều so với bibica.review, điểm quái lạ là thậm chí thèng bibica.review dùng theme nhẹ hơn, ít plugin hơn mới chó cắn 😀 Kẹt cái lúc làm thèng ngoirungdui.com, mình add vào quá nhiều thứ, tới nổi không nhớ chắc là vấn đề do đâu 😛 vài hôm trước ngồi coi lại bài viết Better wp-cron using linux’s crontab từ EasyEngine mới thấy hóa ra thèng ngoirungdui.com đang dùng cách này :]]

Trong bài viết từ EasyEngine họ cũng nói rõ rồi, mình lược dịch lại cơ bản như sau

1. Vô hiệu hoá wp-cron

Thêm dòng bên dưới vào file wp-config.php để tắt sử dụng mặc định WordPress wp-cron

2. Thiết lập một cronjob thực từ linux’s (VPS của bạn)

Từ terminal Linux của bạn, chạy lệnh:

Sau đó, thêm một dòng như dưới đây:

Thay 1 bằng số phút bạn muốn wp cron tự chạy, thay https://bibica.net/ bằng domain của bạn, một số người khuyên là khoảng 30 phút chạy 1 lần là đủ, với các host share thì thậm chí con số này còn lên tới 6h / 1 lần, hay các blog cá nhân thì thậm chí để 12h chạy 1 lần cũng được, nói chung là có chạy là được :]]

Cách làm trên host share thì bạn google tí là ra hé, cũng tương tự thế thôi

Cá nhân mình thì táng hẳn 1 phút check 1 lần 😀 trên con VPS cùi nhất của Vultr chạy cả 2 trang bibica.review và ngoirungdui.com thấy vẫn ổn, chẳng vấn đề gì 😀

Đánh giá hiệu năng

Việc dùng cronjob trực tiếp từ VPS gần như đã được đồng tình của 100% số người là cải thiện hiệu năng cho WordPress rồi

Thời điểm khi vẫn chạy wp-cron trực tiếp

Khi chạy thông qua cronjob

Nói chung là hơi tiếc tẹo là khi làm mình không chụp lại cái ảnh cụ thể hơn, thành ra giờ nhìn cũng không rõ ràng lắm, như bạn thấy thời điểm dùng wp-cron trực tiếp có khi nó lên tới gần 2s, khi dùng cronjob thì cao nhất còn khoảng 1.2s …. thật ra cái này cũng không chắc là do gì, vì thật ra site chậm nhanh còn 1001 lý do khác, demo để bạn để hình dung thôi 😀

Như bạn thấy, đây là tốc độ phản hồi trung bình của ngoirungdui.com, khoảng ~ 350 ms lúc bình thường, và ~ 1000 ms (1s) khi có khách vào tạo đơn mua hàng …

Còn thèng bibica.review, config è cổ ra vẫn hơn 700 ms =))

Thậm chí thèng ngoirungdui.com còn cài WooCommerce, một plugin làm shop khá là hoành tráng trên đó, nói chung ngày xưa thêm vào nhiều thứ quá, tới nổi giờ không nhớ nó là cái gì để config lại bên thèng bibica.review nữa :]]

Việc sử dụng cronjob và WP Crontrol giúp bạn quản lý và chạy các even của site bạn tốt hơn, đây là 1 tip được mọi người khuyến cáo nên dùng, cá nhân mình chạy thì thấy ổn, không thấy có trục trặc gì, chuyện tạo xóa cache cho WP Rocket ổn, backup từ Duplicator Pro ổn … cronjob giúp bạn chạy wp-cron dưới nền, user không còn phải chạy wp-cron trực tiếp nữa, cải thiện hiệu năng hơn

11 thoughts on “Tối ưu WP-Cron bằng WP Crontrol và linux’s cronjob”

  1. Em disable cron mặc định thì web ko vào được, sau đó làm như anh, thêm dòng đó trong crontab -e. (đã chỉnh sửa domain)
    xong khởi động lại nginx, trang web vẫn không vào được vậy anh ơi ?

    • Xem coi có copy sai từ nào không? Bài này ngày xưa viết không để mấy đoạn code vào tag [code] nên dễ copy thừa khoảng trắng hay sai kí tự lắm 😛

      • đã thử hết các thể loại khoảng trống nhưng vẫn không được. thôi kệ anh ơi, duyên số chưa tới :v

        • define(‘DISABLE_WP_CRON’, true); thì chỉ là tắt chạy wp cron thôi, không liên quan gì trang bị lỗi cả 😀

          Thử đơn giản nhất thì cứ cài 1 cái wp mới, xong thêm dòng đó vào file config xem thế nào

          • Quả nhiên disable wp cron default thì nó không bị lỗi. Thêm dòng lệnh trong crontab thì bị lỗi.
            Xóa đi dòng lệnh, vẫn còn lỗi không vào được, và sau khi enable lại cron default thì trang web hoạt động bình thường.
            Vậy vấn đề nằm ở đoạn code đó rồi. Có cách nào fix không Bình Ca??

        • Sửa lại domain, xong bê dòng code đó copy vào, xong Ctrl + O -> Enter -> Ctrl + X là xong rồi rồi

  2. A được rồi, thanks bạn nhiều. Mình thử nhiều lần với 3 cái lệnh trên mà khi đọc đc bài của bạn lại không để ý cái đoạn 2>&1.

  3. Chào bạn,
    Sao mình chạy lệnh
    Crontab -e
    */15 * * * * curl https://domain.com/wp-cron.php?doing_wp_cron &>/dev/null

    thì nó báo: E486: Pattern not found: 15 * * * * curl https?

    MÌnh đã thử qua:
    */15 * * * * /usr/bin/curl –silent https://
    */15 * * * * wget -q -O – https:
    */15 * * * * cd /home/user/public_html; php wp-cron.php &>/dev/null

    Nhưng tất cả không được
    Lỗi này mình phải sửa sao ạ? Cám ơn bạn.

Leave a Comment