Thiết lập gọi WP-Cron bằng Cloudflare Workers

Về cơ bản nó không khác bài viết cũ từ 2018 là mấy, viết lại thành 1 bài mới, vì cách này có thể gọi cron tới wp-cron.php theo cường độ rất cao (tối đa 2s 1 lần) mà không phải dùng qua Systemd Timer, đơn giản và hiệu quả, làm 1 lần rồi có thể quên

Do Cloudflare Workers giới hạn subrequests 50/request ở tài khoản miễn phí, gọi WP-Cron 1 giây 1 lần sẽ bị thiếu đi 10 lần, dùng thực tế mình thấy 2s-5s gọi 1 lần WP-Cron đã rất hiệu quả rồi, 1s chạy 1 lần WP-Cron đôi khi server load không kịp luôn ấy

  • Tạo 1 tài khoản Cloudflare mới, có 100,000 request miễn phí, đỡ tốn request ở tài khoản chính

Thiết lập gọi WP-Cron bằng Cloudflare Workers

  • Workers & Pages -> Create Wordker

Thiết lập gọi WP-Cron bằng Cloudflare Workers

  • Đặt 1 tên tùy ý, sau đó ấn vào Deploy

Thiết lập gọi WP-Cron bằng Cloudflare Workers

  • Ấn tiếp vào Edit code

Xóa hết code cũ đang có, thay bằng đoạn code bên dưới, chỉnh sửa lại cho phù hợp với nhu cầu

addEventListener("scheduled", (event) => {
  event.waitUntil(handleScheduled(event));
});

async function handleScheduled(event) {
  const duration = 60000; // 1 phút
  const interval = 2000; // 2 giây
  const startTime = performance.now();

  while (performance.now() - startTime < duration) {
    const taskStartTime = performance.now();
    await fetch("https://bibica.net/wp-cron.php?doing_wp_cron");
    const elapsedTime = performance.now() - taskStartTime;
    const delay = interval - elapsedTime;
    if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
  }
}
  • Thay dòng 12 bằng domain của bạn
  • Ở dòng 7, muốn bao nhiêu giây gọi cron 1 lần thì sửa lại, mặc định là 2s
    Trong trường hợp bạn muốn 5 giây gửi 1 lần thì sửa lại thành
const interval = 5000; // 5 giây
  • Xong xuôi thì ấn vào Deploy

Thiết lập gọi WP-Cron bằng Cloudflare Workers

Quay lại phần Setting, sẽ thấy Trigger Events

  • Ấn vào Add, chọn Cron Triggers

Thiết lập gọi WP-Cron bằng Cloudflare Workers

Cron expression sửa lại thành */1 * * * *, sau đó ấn Save lại

Tổng thể các bước: 1 phút gọi workers 1 lần, workers trong 1 phút sẽ chạy 30 lần, mỗi lần cách nhau 2 giây tới WP-Cron

Thiết lập gọi WP-Cron bằng Cloudflare Workers

Kiểm tra sơ bộ cron chạy 2s 1 lần chính xác

Thiết lập gọi WP-Cron bằng Cloudflare Workers

Ban đầu mình tưởng 2s gọi 1 lần, nó sẽ tính là 1 request, nhưng theo cách tính toán, quản lý của Cloudflare, số lượng request dùng rất ít, chỉ ~ 1.500 request mỗi ngày, trong khi Cloudflare cho tới 100.000 request mỗi ngày, theo cách tinh toán này, thậm chí có thể tạo cron cho 50 trang web cùng lúc mà vẫn thừa request

Thấy hiệu quả quá nên mình bỏ luôn các dịch vụ gọi cron miễn phí (cron-job.org), dùng luôn từ Cloudflare Worker cho khỏe

Kết luận

Gọi WP-Cron bằng Cloudflare Workers hiệu quả, miễn phí, độ chính xác và ổn định rất cao, lại không phải cấu hình gì từ phía server, làm xong 1 lần rồi thôi, đỡ phải nhớ nhiều

Tổng thể không có bất cứ phàn nàn gì về hình thức này 😀


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!