
Giới thiệu
Đối với developer hay sysadmin, việc tối ưu hóa thời gian và tự động hóa các công việc lặp đi lặp lại là điều không thể thiếu. Với Crontab, bạn có thể thiết lập các tác vụ chạy định kỳ chỉ trong vài dòng lệnh, từ đó tập trung hơn vào những việc thực sự quan trọng.
Bài viết này sẽ cung cấp cho bạn một hướng dẫn đầy đủ về Crontab từ cấu trúc cơ bản của từng Cron job, ý nghĩa các tham số đến những mẹo hay khi sử dụng nó. Với các ví dụ thực tế và giải thích dễ hiểu, bạn sẽ nhanh chóng nắm vững cách sử dụng công cụ này để tự động hóa công việc hàng ngày một cách hiệu quả và chính xác
Crontab là gì?
Crontab (viết tắt của “cron table”) là một file cấu hình hoặc bảng dùng để lưu trữ danh sách các lệnh (cron jobs) cần thực thi theo lịch. Đây là nơi mà người dùng định nghĩa các cron jobs bằng cách ghi chúng vào một file theo định dạng cụ thể. Cron daemon (một chương trình chạy nền) sẽ đọc file này và thực hiện các lệnh theo lịch.
# Chạy script backup.sh lúc 3 giờ sáng hàng ngày
0 3 * * * /path/to/backup.shCron job là gì?
Cron Job là tác vụ cụ thể được định nghĩa trong file Crontab và được cron daemon thực hiện. Mỗi dòng trong file Crontab tương ứng với một cron job.
Cron job bao gồm hai phần chính:
- Thời gian thực thi: Được định nghĩa bằng các trường (minute, hour, day, month, day of week).
- Lệnh hoặc script cần thực hiện.

Crontab là nơi lưu trữ các cron jobs.
Cron job là các tác vụ cụ thể được thực thi bởi hệ thống dựa trên lịch trình trong Crontab.
Các lệnh cơ bản với Crontab
Cài đặt Crontab:
apt install cron -yChỉnh sửa Crontab: Mở file Crontab của người dùng hiện tại để chỉnh sửa. Nếu đây là lần đầu sử dụng, bạn sẽ được yêu cầu chọn trình chỉnh sửa (ví dụ: nano, vim).
crontab -eLiệt kê các tác vụ đã được lên lịch: Hiển thị nội dung của file Crontab để kiểm tra các cron job đã thiết lập.
crontab -lXóa toàn bộ các cron job: Xóa tất cả các tác vụ đã được định nghĩa trong Crontab, hãy cẩn thận khi sử dụng lệnh này.
crontab -rXóa cron job nhưng cần xác nhận: Hệ thống sẽ hỏi xác nhận trước khi xóa toàn bộ cron job.
crontab -i -rImport crontab: Nhập crontab từ file có sẵn.
crontab backup-db.cronCấu trúc của Crontab
Mỗi dòng trong file Crontab biểu thị một cron job, dòng lệnh này gồm hai phần:
- Thời gian chạy: Được xác định bằng 5 trường:
- Minute (phút): 0–59
- Hour (giờ): 0–23
- Day of month (ngày trong tháng): 1–31
- Month (tháng): 1–12
- Day of week (ngày trong tuần): 0–6 (Chủ Nhật là 0 hoặc 7)
- Lệnh hoặc script cần thực thi.
Ví dụ: Chạy script backup.sh vào 3 giờ sáng hàng ngày:
0 3 * * * /path/to/backup.shCác ký tự đặc biệt trong Crontab:
- Dấu sao (*): Đại diện cho “tất cả các giá trị”. Ví dụ:
* * * * *nghĩa là chạy mỗi phút, mỗi giờ, mỗi ngày, mỗi tháng. - Dấu phẩy (,): Dùng để chỉ định nhiều giá trị. Ví dụ:
0 9 * * 1,3nghĩa là chạy vào 9 giờ sáng thứ Hai và thứ Tư. - Dấu gạch ngang (-): Dùng để chỉ phạm vi. Ví dụ:
0 9 * * 1-5nghĩa là chạy vào 9 giờ sáng từ thứ Hai đến thứ Sáu. - Dấu gạch chéo (/): Chỉ khoảng thời gian lặp lại. Ví dụ:
*/15 * * * *nghĩa là chạy mỗi 15 phút.
Hệ thống file mặc định:
- /etc/crontab
- /etc/cron.d/
- /etc/cron.daily/
- /etc/cron.hourly/
- /etc/cron.monthly/
- /etc/cron.weekly/
- /etc/cron.yearly/
File crontab của mỗi user được lưu tại:
- /var/spool/cron/crontabs/
user
Thêm thông báo qua email
Crontab có thể gửi email khi một cron job hoàn thành hoặc gặp lỗi, để kích hoạt tính năng này, thêm dòng sau vào đầu file Crontab:
MAILTO="your_email@example.com"Nếu không muốn nhận email, bạn có thể đặtMAILTO="".
Kiểm tra cron job hoạt động hay không?
Output của các cron job thường được ghi trong file log. Để kiểm tra bạn gõ câu lệnh sau:
tail -f /var/log/syslog
hoặc
tail -f /var/log/cronTrước khi thêm câu lệnh vào Crontab, hãy chạy lệnh hoặc script trong terminal để kiểm tra lỗi. Bạn nên dụng đường dẫn tuyệt đối để tránh việc crontab không tìm thấy script để thực thi nhé.
Một số ví dụ
Ví dụ:
Chạy script 30 phút 1 lần
30 * * * * command
Chạy script vào 3 giờ sáng mỗi ngày
0 3 * * * command
Tạo một tác vụ hoạt động vào một giờ cụ thể (ngày 07 tháng 10 lúc 08:11 AM)
11 08 10 07 * /home/framgia.vn/backup
Tạo 1 tác vụ thực hiện 2 lần trong một ngày (lúc 7:00 và 21:00 hàng ngày)
00 07,21 * * * /home/framgia.vn/backup
Tạo một tác vụ chỉ thực hiện vào các giờ cụ thể (từ 9h-18h thứ 2 đến thứ 6)
00 09-18 * * 1-5 /home/hostingaz.info/full-backup
Tạo một tác vụ chạy vào phút đầu tiên của năm
@yearly /home/framgia.vn/backup
Tạo một tác vụ chạy vào phút đầu tiên của tháng
@monthly /home/framgia.vn/backup
Tạo một tác vụ chạy khi khởi động lại
@reboot CMD
