Crontab trong Linux: VÍ DỤ Lập lịch công việc
⚡ Tóm tắt thông minh
Crontab trong Linux lên lịch cho các lệnh chạy tự động vào những thời điểm, ngày tháng hoặc khoảng thời gian cố định bằng cách sử dụng trình nền cron, cho phép quản trị viên tự động hóa việc sao lưu, dọn dẹp nhật ký, thông báo và bảo trì hệ thống định kỳ mà không cần bất kỳ sự can thiệp thủ công nào.

Crontab, viết tắt của cron table, là tệp cấu hình và lệnh điều khiển hoạt động của hệ thống. Linux Lập lịch công việc. Các phần bên dưới giải thích định dạng crontab, các lệnh để thêm, liệt kê và xóa công việc, các chuỗi @ đặc biệt và các ví dụ lập lịch sẵn sàng sử dụng.
crontab là gì?
Cron được đặt tên theo từ "Chronos" trong tiếng Hy Lạp, có nghĩa là thời gian. Nó là một tiến trình hệ thống (một daemon) tự động thực hiện các tác vụ theo một lịch trình đã định. Cron là một tập hợp các lệnh được sử dụng để chạy các tác vụ theo lịch trình thường xuyên. Crontab là viết tắt của "cron table" (bảng cron), và nó cho phép bạn sử dụng trình lập lịch tác vụ cron để thực hiện các tác vụ đó.
Crontab cũng là tên của chương trình được sử dụng để chỉnh sửa lịch trình đó. Nó được điều khiển bởi một tệp crontab — một tệp cấu hình liệt kê các lệnh shell sẽ chạy định kỳ theo lịch trình đã chỉ định.
Tại sao nên sử dụng Cron Jobs?
Dưới đây là những lý do chính để sử dụng cron jobs trong Linux:
- Thực hiện sao lưu định kỳ các tệp nhật ký hoặc cơ sở dữ liệu.
- Tự động xóa các tập tin nhật ký cũ.
- ArchiChỉnh sửa và xóa các bảng trong cơ sở dữ liệu.
- Gửi email thông báo, chẳng hạn như bản tin hoặc nhắc nhở hết hạn mật khẩu.
- Thực hiện việc dọn dẹp định kỳ dữ liệu được lưu trong bộ nhớ đệm.
- Tự động hóa các tác vụ lặp đi lặp lại trên hệ điều hành Unix và Linux.
- Tự động hóa việc bảo trì hệ thống định kỳ.
Làm cách nào để sử dụng cron trong Linux?
Gói hệ thống Linux bao gồm một trình lập lịch tác vụ hữu ích có tên là crontab. Crontab phổ biến vì nó cho phép lập lịch một tác vụ chạy với quyền người dùng root, giúp việc thay đổi hệ thống tự động dễ dàng hơn. Bạn chỉ cần thay đổi tác vụ một lần và sau đó chờ đến khi nó được kích hoạt lại theo lịch trình.
Định dạng Crontab của Linux
Một mục nhập crontab trong Linux có sáu trường. Năm trường đầu tiên xác định thời gian và ngày thực thi, và trường thứ sáu chứa lệnh cần chạy.
Cú pháp crontab:
[Minute] [hour] [Day_of_the_Month] [Month_of_the_Year] [Day_of_the_Week] [command]
Sơ đồ bên dưới thể hiện mối liên hệ giữa mỗi dấu hoa thị trong một mục crontab với trường mà nó điều khiển, từ phút đến ngày trong tuần, tiếp theo là lệnh cần thực thi.
Năm ô thời gian chấp nhận các giá trị sau: phút (0–59), giờ (0–23), ngày trong tháng (1–31), tháng (1–12 hoặc tháng 1–tháng 12) và ngày trong tuần (0–7, trong đó 0 và 7 đều là Chủ nhật). Bạn điều khiển từng ô bằng các ký tự đặc biệt sau:
- Dấu hoa thị (*): Khớp với mọi giá trị có thể có cho trường đó.
- Xác định một phạm vi: Sử dụng dấu gạch ngang để thiết lập phạm vi, ví dụ như 1-10, 30-40, tháng 1-tháng 3 hoặc thứ Hai-thứ Tư.
- Xác định nhiều phạm vi: Sử dụng dấu phẩy để kết hợp các khoảng thời gian, ví dụ như apr-jun,oct-dec.
Cách thêm/sửa đổi Crontab
Người dùng có thể chỉnh sửa các tác vụ crontab của riêng mình bằng lệnh crontab sau. Tùy chọn -u nhắm mục tiêu đến crontab của một người dùng cụ thể, vì vậy hãy cung cấp tên người dùng như được hiển thị trong các ví dụ sau:
$ crontab -u -e
Lệnh trên sẽ mở tệp cấu hình crontab cá nhân cho hệ thống của bạn, và bạn có thể chỉnh sửa nó bằng trình soạn thảo văn bản mặc định của mình.
Không cần khởi động lại cron; nó sẽ tự động nhận các thay đổi của bạn. Để xem các công việc hiện tại, hãy sử dụng lệnh sau:
$ crontab -l
Để xóa các tác vụ crontab của bạn, hãy sử dụng lệnh sau:
$ crontab -r
Để thêm hoặc cập nhật một tác vụ trong crontab, hãy sử dụng lệnh sau:
crontab -e
Để chỉnh sửa crontab của người dùng khác, hãy chỉ định tên người dùng đó kèm theo tùy chọn -u:
crontab -u username -e
Cách liệt kê Crontab
Để xem các mục crontab của người dùng hiện tại:
crontab -l
Để xem các mục crontab của một người dùng cụ thể:
crontab -u username -l
Các ví dụ quan trọng về Crontab
Dưới đây là một số ví dụ quan trọng, sẵn sàng sử dụng về lịch trình crontab:
| Mô tả Chi tiết | Lệnh |
|---|---|
| Chạy các tác vụ lập lịch khác nhau. Lệnh dưới đây được thực thi vào lúc 7 giờ sáng và 5 giờ chiều hàng ngày. |
0 7,17 * * * /scripts/script.sh
|
| Thực thi một tác vụ định kỳ (cron job) cứ sau 5 phút. |
*/5* * * * * /scripts/script.sh
|
| Thực hiện nhiệm vụ mỗi Monday Vào lúc 5 giờ sáng. Điều này rất hữu ích cho các công việc hàng tuần như dọn dẹp hệ thống. |
0 5 * * mon /scripts/script.sh
|
| Chạy kịch bản của bạn sau mỗi 3 phút. |
*/3 * * * * /scripts/monitor.sh
|
| Thiết lập lịch trình cho một tác vụ cron chạy vào những tháng cụ thể — ở đây là tháng Hai, tháng Sáu và tháng Chín. |
* * * feb,jun,sep * /script/script.sh
|
| Thực thi vào những ngày đã chọn. Ví dụ này chạy mỗi ngày. Monday và Thứ Tư lúc 5 giờ chiều. |
0 17 * * mon,wed /script/script.sh
|
| Cho phép cron chạy vào thứ Bảy đầu tiên của mỗi tháng. |
0 2 * * sat [ $(date +%d) -le 06 ] && /script/script.sh |
| Chương trình sẽ chạy một tập lệnh định kỳ 6 giờ một lần, được cấu hình như bên dưới. |
0 */6 * * * /scripts/script.sh
|
| Lên lịch cho một tác vụ thực thi hai lần. Monday và thứ Ba. Sử dụng các thiết lập sau để thực hiện. |
0 4,17 * * mon,tue /scripts/script.sh
|
| Lên lịch cho một tác vụ cron chạy mỗi 15 giây. |
* * * * * /scripts/script.sh * * * * * sleep 15; /scripts/script.sh |
| Lập lịch các tác vụ hàng năm. @yearly tương tự như “0 0 1 1 *”. Nó chạy tác vụ một lần mỗi năm vào lúc nửa đêm ngày 1 tháng 1 — rất tiện lợi cho lời chúc mừng năm mới. |
@yearly /scripts/script.sh
|
| Chạy các tác vụ hàng tháng. @monthly tương tự như “0 0 1 * *”. Nó chạy tác vụ vào lúc nửa đêm ngày đầu tiên của mỗi tháng. |
@monthly /scripts/script.sh
|
| Thực thi nhiều tác vụ bằng một mục nhập cron duy nhất. |
* * * * * /scripts/script.sh; /scripts/scrit2.sh |
| Lên lịch các tác vụ hàng tuần. @weekly tương tự như “0 0 * * 0”. Nó chạy các tác vụ hàng tuần như dọn dẹp hệ thống vào lúc nửa đêm Chủ nhật hàng tuần. |
@weekly /bin/script.sh
|
| Lên lịch thực hiện các tác vụ hàng ngày. @daily tương tự như “0 0 * * *”. Nó chạy tác vụ một lần mỗi ngày vào lúc nửa đêm. |
@daily /scripts/script.sh
|
| Chạy các tác vụ theo giờ. @hourly tương tự như “0 * * * *”. Nó chạy tác vụ vào đầu mỗi giờ. |
@hourly /scripts/script.sh
|
| Chạy các tác vụ khi hệ thống khởi động lại. Tham số `@reboot` hữu ích cho các tác vụ mà hệ thống nên chạy khi khởi động, cho phép các công việc nền tự động bắt đầu. |
@reboot /scripts/script.sh
|

