# Quy tắc và ví dụ khi tạo CronJob
**Giới thiệu về CronJob**
CronJob là một đối tượng Kubernetes cho phép bạn lên lịch và chạy các tác vụ định kỳ. Chúng có thể được sử dụng để tự động hóa một loạt các tác vụ, chẳng hạn như sao lưu dữ liệu, gửi thông báo và xử lý dữ liệu.
**Quy tắc tạo CronJob**
CronJob được xác định bởi các trường sau:
* **schedule:** Định nghĩa lịch trình chạy của CronJob. Nó có thể được biểu diễn dưới dạng biểu thức Cron.
* **jobTemplate:** Định nghĩa mẫu cho các Pod sẽ được tạo ra bởi CronJob hỗ trợ thông qua giao diện của Sunteco Cloud
**Biểu thức Cron**
Biểu thức Cron là một chuỗi được sử dụng để xác định lịch trình chạy của CronJob. Nó có thể được biểu diễn dưới dạng chuỗi chữ và số, được phân tách bằng dấu cách.
### Cấu trúc cơ bản
Cơ bản là một lệnh cron job sẽ có 2 thành phần chính đó chính là: schedule và command. Đây là cách viết lệnh:
* `* * * *` : là thời gian, chúng ta sẽ tìm hiểu ý nghĩa của nó ở phần dưới
### `Cú pháp`
Thì cú pháp của nó sẽ biểu thị như sau :
|
|
|
|
|
|
phút1 - 59 |
giờ0 - 23 |
ngày1 - 31 |
tháng1 - 12 |
thứ0 - 7 |
|
Tóm tắt :
* **Minute** – phút của giờ mà lệnh sẽ chạy, trong khoảng từ 0 đến 59
* **Hour** – dựa trên giờ mà lệnh sẽ chạy, trong khoảng từ 0 đến 23
* **Day of the month** – dựa trên ngày của tháng mà bạn muốn chạy lệnh, trong khoảng từ 1 đến 31
* **Month** – dựa trên tháng mà lệnh cụ thể chạy, trong khoảng từ 1 đến 12
* **Day of the week** – dựa trên ngày của tuần mà bạn muốn chạy lệnh, trong khoảng từ 0 đến 7
1. **Quy tắc và ví dụ:**
a. **Cấu trúc cơ bản:** Biểu thức lịch trình thường có cấu trúc cơ bản gồm năm (year), tháng (month), ngày (day), giờ (hour or hours), phút (minute or minutes), và giây (second or seconds), tùy theo hệ thống quản lý thời gian.
Ví dụ: `0 0 * * *` (mỗi giờ đầu tiên của mỗi ngày).
b. **Dấu cách và ký tự trống:** Phần của biểu thức lịch trình thường được ngăn cách bằng dấu cách hoặc ký tự trống.
Ví dụ: `0 0 * * *` hoặc `0 0 * * *`
c. **Số lượng:** Một số lượng cụ thể của các phần (năm, tháng, ngày, giờ, phút) được định nghĩa bằng các số nguyên không âm.
Ví dụ: `0 0 1 1 *` (mỗi năm vào ngày 1 tháng 1).
d. **Dấu hoa thị (\*):** Dấu hoa thị (\*) thường được sử dụng để biểu thị "mọi giá trị" cho một phần cụ thể.
Ví dụ: `* * * * *` (mọi giây, mọi phút, mọi giờ, mọi ngày, mọi tháng, mọi năm).
e. **Dấu phẩy (,):** Dấu phẩy thường được sử dụng để xác định nhiều giá trị cho một phần cụ thể.
Ví dụ: `0,30 * * * *` (mỗi phút đầu tiên và mỗi phút thứ 30 của mỗi giờ).
f. **Dấu gạch nối (-):** Dấu gạch nối (-) thường được sử dụng để xác định khoảng giá trị cho một phần cụ thể.
Ví dụ: `1-5 * * * *` (từ phút thứ 1 đến phút thứ 5 của mỗi giờ).
g. **Dấu gạch chéo (/):** Dấu gạch chéo (/) thường được sử dụng để xác định khoảng thời gian hoặc tần suất.
Ví dụ: `*/15 * * * *` (mỗi 15 giây).
h. **Biểu thức vùng (Ranges):** Bạn có thể xác định một biểu thức lịch trình cho một khoảng giá trị cụ thể.
Ví dụ: `0 9-17 * MON-FRI` (mỗi ngày từ thứ 2 đến thứ 6 vào giờ từ 9 sáng đến 5 chiều).
i. **Biểu thức có dấu hỏi (?):** Một số biểu thức lịch trình có thể chứa dấu hỏi (?) để chỉ ra phần không xác định hoặc bị bỏ qua.
Ví dụ: `0 0 ? * *` (mỗi giờ đầu tiên của mỗi ngày).
j. **Sử dụng số nguyên từ 0 đến 6:** Để chỉ định ngày trong tuần, bạn sử dụng các số nguyên từ 0 đến 6, tương ứng với các ngày từ Chủ Nhật (0) đến thứ 7 (6).
Ví dụ:
* `0 0 * 0` sẽ chạy vào mỗi Chủ Nhật.
* `0 0 * 1` sẽ chạy vào mỗi thứ Hai.
k. **Sử dụng các biểu thức tên ngày trong tuần:** Một số biểu thức Cron cũng cho phép sử dụng các biểu thức tên ngày trong tuần, chẳng hạn như `SUN`, `MON`, `TUE`, `WED`, `THU`, `FRI`, và `SAT`.
Ví dụ:
* `0 0 * SUN` sẽ chạy vào mỗi Chủ Nhật.
* `0 0 * MON` sẽ chạy vào mỗi thứ Hai.
l. **Sử dụng ký tự '\*' cho mọi ngày trong tuần:** Nếu bạn muốn biểu thức Cron chạy vào mọi ngày trong tuần, bạn có thể sử dụng ký tự `*` cho phần ngày trong tuần.
Ví dụ:
* `0 0 * *` sẽ chạy vào mọi ngày trong tuần.
m. **Kết hợp ngày trong tuần:** Bạn có thể kết hợp ngày trong tuần bằng cách sử dụng dấu phẩy (,) hoặc khoảng (-).
Ví dụ:
* `0 0 * 1,3,5` sẽ chạy vào mỗi thứ Hai, thứ Tư, và thứ Sáu.
* `0 0 * 2-4` sẽ chạy vào mỗi thứ Ba, thứ Tư, và thứ Năm.
n. **Sử dụng ký tự '?' trong biểu thức Cron:** Trong một số biểu thức Cron đặc biệt như biểu thức Cron dành cho Quartz Scheduler, bạn có thể sử dụng ký tự '?' để chỉ ra phần ngày trong tuần không quan trọng.
Ví dụ:
* `0`
* `? * MON-SAT` sẽ chạy vào mỗi ngày từ thứ Hai đến thứ Bảy.