WP Cron là gì? Tắt cron ảo trong WordPress để website nhanh hơn

Lên lịch xuất bản các bài đăng mới trong WordPress, kiểm tra các plugin hoặc theme đã có bản mới, tự động backup website … đây đều là những ví dụ điển hình tác vụ được thực hiện lặp đi lặp lại hay gọi tắt là cron.

Chi tiết về Cron hay WP-Cron và cách để tối ưu chúng thì trong bài viết phía dưới sẽ cho bạn biết điều đó.

WP Cron là gì?

Cron là một lệnh để lập lịch tác vụ được tích hợp trong các hệ thống dựa trên Linux, ví dụ như Ubuntu, Debian, Mac OSX… Đối với Windows, tính năng này được gọi là “Task Scheduler“.

Giống như bao hệ thống nói trên WordPress cũng có WP-Cron để chạy các tác vụ được lên lịch sẵn, ví dụ như bài viết được lên lịch tự đăng chẳng hạn hoặc nhiều lịch trình khác mà bạn muốn nó tự chạy trong tương lai.

Tuy nhiên WP-Cron mặc định ở WordPress hoạt động rất máy móc bởi vì nếu có khách truy cập vào website của bạn thì cron nó mới chạy, vậy giả sử website bạn ít hoặc không có khách truy cập thì sao, thì các lịch trình bạn đặt nó lại chạy sai mất rồi vì không có khách truy cập thì nó đâu chạy. Ngược lại nếu khách truy cập nhiều thì sao, thì mỗi 1 khách truy cập cron lại chạy 1 phát, vậy nhiều khách thì nó nhân lên vậy rất tốn tài nguyên máy chủ mà cron toàn chạy vô nghĩa.

Khoảng thời gian mặc định để cron WordPress chạy là hàng giờ, hai lần mỗi ngày, hàng ngày và hàng tuần. Các cron phụ thuộc vào người dùng truy cập trang web của bạn như đã nói ở bên trên nên đây thực sự là 1 bài toán cần tháo gỡ nếu bạn muốn website của bạn được nhanh hơn.

Cron ảo trên WordPress

Trên tiêu đề bài viết mình có viết là cron ảo là vì WP-Cron chỉ được kích hoạt khi có người truy cập trang web, dù cron chạy nhưng rất ảo 🙂 nó không có tác dụng gì rõ ràng mà chỉ làm cho máy chủ bạn quá tải hoặc làm cho các tác vụ được lên lịch trước chạy sai nếu không có khách truy cập mà thôi.

Vậy làm sao để các tác vụ đã được lên lịch chạy đúng yêu cầu mà không ảnh hưởng đến hiệu suất của trang web, đó là bạn sẽ phải lên lịch cron thực để đúng thời điểm cron sẽ chạy và các tác vụ được lên lịch sẽ hoạt động chính xác.

Giả dụ bạn cài đặt cron tự động chạy mỗi 5 phút 1 lần chẳng hạn, hoặc 10 phút nếu không có tác vụ gì cần thiết và nội dung phía dưới sẽ hướng dẫn bạn cách để làm điều đó.

Theo dõi wp-cron.php nào vừa chạy

Nếu bạn muốn xem về WP-Cron nào vừa được chạy và hooks nào được móc và chạy khá đơn giản, sau khi cài plugin bạn có thể vào Công cụ > Cron Logs để xem danh sách các WP-Cron vừa được chạy. Bạn thử mở ẩn danh và truy cập trang web của mình, và sau đó quay lại Công cụ > Cron Logs bạn sẽ thấy nó sẽ có bảng ghi được lưu lại, như vậy càng chứng minh rằng nếu có khách nó mới chạy không khách truy cập thì nó không chạy.

Công cụ này nhỏ nhẹ và mình thấy bạn hiểu cách wpcron chạy mà thôi, còn nếu bạn muốn tùy chỉnh (thêm, xóa, sửa) các tác vụ được lên lịch, các tác vụ thừa … thì bạn có thể cài plugin Advanced Cron Manager hoặc

Tắt WP Cron ảo và bật cron thực để tối ưu website

Để tắt WP Cron mặc định trong WordPress bạn hãy thêm đoạn code sau vào file wp-config.php

define( 'DISABLE_WP_CRON', true );

Thường thêm vào phía cuối file, dưới đoạn /* That’s all, stop editing! Happy blogging. */

Dưới đây là 2 tùy chọn để bạn Cron nhé, bạn có thể thực hiện theo 1 trong 2 cách nếu bạn thấy phù hợp.

1. Chạy Cron thông qua dịch vụ bên thứ 3

Bạn có thể đăng ký 1 tài khoản tại

Sau khi đăng ký thành công, bạn đăng nhập vào tài khoản và click vào Cronjobs để thiết đặt cron cho WordPress

Tiếp theo click vào CREATE CRONJOBS

Tiêu đề thì bạn đặt tên website hoặc tên gợi nhớ cronjob, url thì bạn sẽ nhập vào là: https://vutruso.com/wp-cron.php?doing_wp_cron (thay vutruso.com thành tên miền của bạn nhé)

Mục Execution schedule thì mình thường chọn 5 phút cron sẽ chạy 1 lần, nếu bạn muốn có thể tùy chọn giảm xuống hoặc tăng lên tùy theo yêu cầu, ngoài ra nó còn cho phép bạn tùy chỉnh cron chạy theo ý của bạn ở mục Custom

Sau khi tùy chọn xong bạn có thể test thử bằng cách click vào TEST RUN hoặc nhấn CREATE để tạo luôn

Vậy là bạn đã thiết đặt cron thực cho WordPress thành công, cách này lệ thuộc vào bên cron-job.org tuy nhiên quá trình sử dụng mình thấy khá ổn định, nó không gặp vấn đề gì cả. Bạn có thể sử dụng và trải nghiệm.

2. Chạy Cron thực thông hosting

2.1 – Nếu bạn sử dụng Cpanel

Nếu bạn sử dụng bảng điều khiển Cpanel thì bạn có thể cài đặt Cron bằng cách đơn giản dưới đây.

1. Đăng nhập vào Cpanel
2. Tìm kiếm mục Cron Jobs

Tại đây bạn có thể tùy chọn các phần cấu hình của mình :

  • Common Settings : Tại đây bạn có thể chọn một vài Option có sẳn
  • Minute: Phút
  • Hour: Giờ
  • Day: Ngày
  • Month: Tháng
  • Weekday: Tuần lễ
  • Command: Lệnh thực hiện

Nhấn Add New Cron Job sau khi bạn thêm đủ thông tin xong.

Ví dụ mình thực hiện Command dòng lệnh sau (nhớ thay tên vutruso.com thành tên website của bạn)

wget -q -O - https://vutruso.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Vậy là bạn đã cài đặt Cron thực thay cho WP-Cron thành công trên Cpanel rồi.

2.2 – Nếu bạn sử dụng Directadmin

Nếu bạn sử dụng bảng điều khiển Directadmin bạn cũng dễ dàng tìm thấy phần Cron Jobs ở mục Advanced Features

Bạn nhấn Create Cron Job sau đó cấu hình hình cũng không khác gì so với Cpanel

wget -q -O - https://vutruso.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Nhấn Create là xong.

3. Chạy Cron thông qua command line (ssh)

Nếu bạn sử dụng VPS bạn có thể sử dụng lệnh crontab -e và thêm vào đoạn code phía dưới để chạy cron mỗi 5 phút 1 lần.

*/5 * * * * curl https://vutruso.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

4. Chạy Cron thông qua shell_exec

Ngoài 2 cách thường dùng bên trên, bạn có thể tạo 1 file vutruso-cron.php ở thư mục gốc của website (public_html), tiếp theo bạn hãy nhập đoạn code phía dưới đây vào. ( Nhớ thay vutruso.com thành tên miền của bạn 🙂 )

<?php
// Add cron job
shell_exec("(crontab -l ; echo '*/15 * * * * wget -q -O - https://vutruso.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1') | sort | uniq | crontab") ;

// Output cron jobs list
$output = shell_exec('crontab -l') ;
echo "$output" ;
?>

Cách này mình không khuyến nghị và có thể 1 số nhà cung cấp host họ sẽ chặn hàm php shell_exec nên có thể bạn tạo file cron thủ công nhưng chúng sẽ không hoạt động được.

Code cơ bản để tạo 1 sự kiện được lên lịch tự động chạy

Tạo cron đơn giản tự động gửi email

Bạn có thể thêm đoạn code này trong file functions.php

add_action('my_hourly_cronjob', 'hourly_action');
function hourly_action() {
    wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' );
}

if (! wp_next_scheduled ( 'my_hourly_cronjob' )) {
    wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob');
}

Đoạn code đơn giản bên trên sẽ tự động chạy mỗi 1h 1 lần.

Kết luận

Hy vọng qua bài viết bạn sẽ hiểu cách thực vận hành của WP-Cron, nếu web bạn nhỏ thì có thể bạn chưa quan tâm tới vấn đề này nhưng nếu website của bạn có nhiều khách truy cập hơn thì bạn nên tắt WP-Cron mặc định mà hãy chạy cron thực như mình đề cập trong bài.

Chúc bạn thành công.

Tiến Dũng Đào là chuyên gia quản lý, vận hành các dịch vụ website. Anh có nhiều năm kinh nghiệm về VPS, Hosting, technical SEO, CMS. Đặc biệt yêu thích WordPress với hơn 5 năm phát triển theme và plugin.Sở thích của anh là đọc, viết blog, đi du lịch, tập võ và chia sẻ các kiến thức cho mọi người.

Bài viết liên quan