Tìm hiểu các thông số cấu hình Cron job

4848

Vừa rồi, tớ có task phải làm 1 con scheduler xoá dữ liệu rác, 1 tháng chạy 1 lần. Trước giờ tớ chạy cron job bằng công cụ hỗ trợ của server, có UI nên cũng đếch quan tâm cơ chế nó cấu hình như nào, cứ táng đúng ngày-tháng-năm giờ-phút-giây vào đúng ô, click OK là nó tự generate ra cấu hình. That’s all =)).

Tuy nhiên lần này tớ phải động tới cấu hình cho cron job. Tiện tìm hiểu nó nên note lại 1 bài :))

Chức năng của Cron Jo là để thực hiện những lệnh được yêu cầu trong khoảng thời gian được xác đinh từ đầu bởi quản trị viên/ người điều hành Hosting. Nói dễ hiểu, Cron Job là chức năng hỗ trợ lên lịch tự động để thực hiện 1 số thao tác, công việc nào đó.

Cấu trúc cấu hình cron job

Cron job thường có dạng

cron = "X X X X X" (5 kí tự)

hay

cron = "X X X X X X" (6 kí tự)

Đối với 5 kí tự thì đó là:

<phút> <giờ> <ngày trong tháng> <tháng> <ngày trong tuần>

Còn với 6 kí tự thì thêm giây nữa:

<giây> <phút> <giờ> <ngày> <tháng> <ngày trong tuần>

Các kí tự X được thay thế bởi một trong các kí tự sau:

* : bất kì giá trị nào
, : danh sách các giá trị
- : khoảng giá trị
/ : theo bước nhảy

Đầu tiên đọc lướt qua dống này, tớ chợt nghĩ: dễ vkl. Giờ muốn cho nó chạy 2s 1 lần để test cái scheduler thì táng config

cron = "2 * * * * *"

có mẹ gì khó đâu :v. Tuy nhiên thì khi chạy test thì sai “cờ mờ nờ rờ”. Nó chạy 1 phút 1 lần. Đó là giây thứ 2 của mỗi phút, không phải mỗi 2s 1 lần. Như vậy, config của cron chính xác phải là:

<giây trong phút> <phút trong giờ> <giờ trong ngày> <ngày trong tháng> <tháng trong năm> <ngày trong tuần>

Config 2s 1 lần kiểu gì?

Cùng nhìn vào đống kí tự có thể thay thế của X, ta có thể cấu hình chạy 2s 1 lần bằng các cách sau:

Sử dụng “,”

Dấu “,” đại diện cho danh sách các giá trị. Nghĩa là bạn muốn chạy 2s 1 lần thì bạn liệt kê các giá trị giây cách nhau 2s xuất hiện trong một phút.

cron= "0,2,4,6,8,10,12,14,16,18,20.... 58 * * * * *"

Cách này khá là thủ công, chỉ nên dùng khi bạn sử dụng để cấu hình cho 1 vài giá trị đặc biệt, không có quy luật.

  Hướng dẫn sử dụng Cron Job trong Laravel 5.8

Sử dụng “-“

Dấu “-” đại diện cho khoảng giá trị. Ví dụ bạn muốn chạy vào các giây 1,2,3,4,5,6 thì bạn có thể dùng “-” cho ngắn gọn hơn, thay vì “,”. Đó là:

cron="1-6 * * * * *"

Tất nhiên là config này không sử dụng được cho 2s 1 lần. Tiện thì tớ giới thiệu luôn :))

Sử dụng “/”

Dấu “/” đại diện cho bước nhảy của giá trị, tính từ 0. Giả sử với kí tự ở vị trí của giây, tớ config:

*/1 => bước nhảy 1, tính từ 0: 0,1,2,3,4,...,59

*/2 => bước nhảy 2, tính từ 0: 0,2,4,6,8,...,58

*/5 => bước nhảy 5, tính từ 0: 0,5,10,15,...,55

Ngoài ra có thể thay dấu “*” là các vị trí bắt đầu của bước nhảy. Ví dụ

5/1 => bước nhảy 1, tính từ 5: 5,6,7,8,...59

5/8 => bước nhảy 8, tính từ 5: 5,13,21,29

13/4 => bước nhảy 4, tính từ giây thứ 13

blah,blah....

Tuy nhiên đây là “non-standard config”, tức là không phải config tiêu chuẩn nên có thể sẽ không hoạt động trên một số hệ thống cron job.

Như vậy để config 2s/lần thì config “dư lày”:

cron="*/2 * * * * *"

Done :))

Crontab.guru

1 trang web khá hay là https://crontab.guru. Crontab cho phép bạn nhập vào cấu hình và đưa ra kết quả ở dạng giải thích: “At every minute“, “At 00:00“, … khá dễ hiểu.  Ngoài ra bạn có thể click vào “next” như hình để xem 1 vài ví dụ.

Cron job

Giao diện crontab.guru

Bổ sung

Ngoài crontab.guru thì có trang http://www.cronmaker.com/ cũng là 1 tool giúp chúng ta tạo cronjob tốt hơn, với lượng example rộng hơn. Thanks @Jack đã suggest.

Tổng kết về SEO title preview:

Qua bài này, hi vọng có thể giúp bạn hiểu hơn được về cách cấu hình.

Hãy nhớ: “Cron job failures can be disastrous!”

Bài viết gốc được đăng tải tại Minhphong360

Có thể bạn muốn xem thêm:

Xem thêm việc làm IT tại TopDev!