Hướng dẫn xây dựng CronJob trên PHP

Hướng dẫn xây dựng CronJob trên PHP

Nếu các bạn đã từng sử dụng các hosting Linux chạy các control panel như Cpanel, Direct Admin thì có lẽ đều biết tới tính năng CronTab. Tính năng này giúp bạn tạo ra một lịch trình thực hiện các công việc được định nghĩa tác vụ bằng PHP Script, …. để hoạt động lặp đi lặp lại theo chu kỳ định sẵn.

Ở bài viết này mình sẽ không hướng dẫn các bạn về cách sử dụng tính năng này. Hạn chế của nó là chỉ có thể thực hiện theo chu kỳ 1 phút trở lên, trong trường hợp muốn thực hiện các công việc lặp lại theo chu kỳ 1s, 5s, 10s, … thì CronTab sẽ không làm được. Mình sẽ hướng dẫn các bạn làm CronJob có thể thực hiện theo chu kỳ 1s, 2s, 3s, …. mời các bạn tiếp tục đọc bài viết để có thể làm được nhé.

Hướng dẫn xây dựng CronJob trên PHP

Hướng dẫn xây dựng CronJob trên PHP

Cơ chế hoạt động

  • CronTab mình hướng dẫn các bạn làm sẽ thực hiện theo cơ chế set_time_limit(0) để cho phép đoạn code PHP không bị dừng lại cho dù chạy quá 30s theo thiết lập mặc định của máy chủ.
  • Khi khởi chạy tạo một tập tin: run.cn, tập tin này có ý nghĩa: nếu nó tồn tại thì script tiếp tục thực hiện các công việc mà bạn mong muốn. Nếu nó bị xóa đi, thì script sẽ dừng lại. (Nếu không dừng lại được theo ý muốn thì hệ thống của bạn sẽ bị treo bởi vì nếu bạn gọi lại Job nhiều lần sẽ tốn tài nguyên).
  • Sử dụng lệnh while để cho các đoạn mã thực thi chứa trong đó được hoạt động theo chu kỳ vô tận và dừng lại nếu muốn
  • Sử dụng hàm sleep để tạm nghỉ theo số giây giữa mỗi lần thực hiện khối lệnh bạn định nghĩa

Lưu ý: Sử dụng hàm: set_time_limit, do vậy bạn phải đặt safe_mode = OFF.

Code ví dụ mẫu

Lời kết

Trong thực tế khi xây dựng các ứng dụng website. Nhu cầu sử dụng CronJob để giải quyết một số công việc tự động lặp đi lặp lại như: xóa bố nhớ đệm, xóa các bản ghi quá hạn, … là điều thường xuyên xảy ra. Với bài viết hướng dẫn này của mình, các bạn sẽ có thể tự làm và phát triển cho mình một cronJob chuyên nghiệp mà không cần phải phụ thuộc vào hệ điều hành, tùy biến hơn rất nhiều.