Hướng dẫn thay thế WP-Cron bằng System Cron trên Ubuntu 24.04

WP-Cron mặc định của WordPress chỉ chạy khi có HTTP request vào site, dẫn đến các tác vụ nền bị trễ hoặc không chạy đúng giờ. Bài viết này hướng dẫn thay thế hoàn toàn bằng System Cron thật sự của Ubuntu, sử dụng WP-CLI để đảm bảo độ chính xác và hiệu năng.

Hướng dẫn thay thế WP-Cron bằng System Cron trên Ubuntu 24.04

Bước 1: Cài WP-CLI

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Kiểm tra cài đặt thành công:

wp --info

Bước 2: Xác Định Thông Tin Server

Tìm đường dẫn thư mục gốc WordPress:

find /var/www -name "wp-config.php" 2>/dev/null

Xác định user mà PHP đang chạy:

ps aux | grep php

Trên Ubuntu 24.04 với Nginx hoặc Apache, user thường là www-data và path thường là /var/www/html.

Bước 3: Tắt WP-Cron Trong WordPress

Mở file wp-config.php, thêm dòng sau trước /* That's all, stop editing! */:

define('DISABLE_WP_CRON', true);

Bước 4: Thiết Lập System Cron

Mở crontab của user PHP:

sudo crontab -u www-data -e

Thêm vào cuối file — thay path thực tế của bạn:

* * * * * flock -n /tmp/wp-cron.lock wp cron event run --due-now --path=/var/www/html --allow-root --quiet > /dev/null 2>&1

flock -n đảm bảo nếu lần chạy trước chưa xong, lần tiếp theo sẽ bị bỏ qua thay vì chồng chéo — đặc biệt quan trọng với site lớn nhiều tác vụ nền.

Verify crontab đã được lưu:

sudo crontab -u www-data -l

Bước 5: Kiểm Tra Hoạt Động

Chờ 1-2 phút rồi kiểm tra syslog để xác nhận job đang chạy:

sudo grep CRON /var/log/syslog | grep www-data | tail -5

Kiểm tra hàng đợi tác vụ WordPress không còn tác vụ quá hạn:

wp cron event list --path=/var/www/html --allow-root

Nếu cột next_run không còn tác vụ nào quá hạn sau 1-2 phút, System Cron đã tiếp quản hoàn toàn và hoạt động đúng.

Bước 6: Ngăn Cron Log Làm Nhiễu Syslog

Mặc định, mỗi lần cron chạy đều ghi một dòng vào /var/log/syslog. Với tần suất 1 phút một lần, syslog sẽ tích lũy hơn 500.000 dòng mỗi năm. Tạo filter để loại bỏ:

sudo nano /etc/rsyslog.d/50-cron-filter.conf
:programname, isequal, "CRON" \
:msg, contains, "www-data" stop

Áp dụng ngay:

sudo systemctl restart rsyslog

Cron job hệ thống của root vẫn được ghi log bình thường, chỉ lọc riêng job WP-Cron của www-data.

Chúc các bạn thành công!

Bình luận


  • Không có bình luận.

Công cụ trực tuyến

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...