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