

Crontab là công cụ giúp người dùng Linux lên lịch để tự động thực thi lệnh hoặc script vào những thời điểm xác định. Thay vì đăng nhập server và chạy tác vụ thủ công mỗi ngày, bạn có thể dùng Crontab để tự động backup dữ liệu, dọn log, chạy script, đồng bộ dữ liệu hoặc thực hiện nhiều công việc quản trị hệ thống khác.
Để sử dụng Crontab hiệu quả, trước tiên cần phân biệt rõ Cron, Crontab và Cron Job cũng như hiểu cấu trúc 5 trường thời gian của một lịch chạy.
Crontab là bảng cấu hình chứa danh sách các lệnh cần thực thi cùng với thời gian tương ứng trên hệ điều hành Unix/Linux. Mỗi người dùng có thể có Crontab riêng và các lệnh trong đó được thực thi với quyền của người sở hữu Crontab.
Một dòng Crontab cơ bản có dạng:
0 2 * * * /home/user/backup.shDòng trên có nghĩa là chạy file backup.sh vào lúc 02:00 mỗi ngày.
Crontab thường được sử dụng trong những công việc cần thực hiện định kỳ như:
Nhờ khả năng tự động hóa này, Crontab đặc biệt hữu ích đối với Developer, System Administrator và DevOps khi quản lý Linux Server, VPS hoặc Cloud Server.

Cron, Crontab và Cron Job có liên quan chặt chẽ nhưng không phải cùng một khái niệm.
Thuật ngữ | Ý nghĩa |
| Cron | Dịch vụ hoặc daemon chịu trách nhiệm kiểm tra lịch và thực thi các tác vụ |
| Crontab | Bảng cấu hình chứa lịch chạy và lệnh |
| Cron Job | Một tác vụ cụ thể được khai báo trong Crontab |
Có thể hiểu đơn giản:
Cron là bộ máy thực thi → Crontab là bảng lịch → Cron Job là từng công việc trong bảng lịch đó.
Ví dụ:
30 1 * * * /home/user/database-backup.sh
Đây là một Cron Job được lưu trong Crontab. Cron sẽ kiểm tra lịch và chạy script database-backup.sh lúc 01:30 mỗi ngày.
Quá trình hoạt động của Crontab có thể hình dung theo các bước:
Ví dụ bạn muốn backup database lúc 02:00 mỗi ngày:
0 2 * * * /home/user/backup-db.shKhi đồng hồ hệ thống đến 02:00, Cron sẽ thực thi script đó mà không cần người quản trị đăng nhập SSH và chạy lệnh thủ công.
Đây là lý do Cron thường được sử dụng cho các quy trình tự động hóa đơn giản trên Linux Server.
Một Cron Job trong Crontab của người dùng thường có cấu trúc:
* * * * * command
│ │ │ │ │
│ │ │ │ └── Thứ trong tuần
│ │ │ └──── Tháng
│ │ └────── Ngày trong tháng
│ └──────── Giờ
└────────── PhútNăm trường đầu tiên xác định thời gian chạy, phần còn lại là lệnh cần thực thi. Linux cron sử dụng các phạm vi thời gian phổ biến sau: phút 0-59, giờ 0-23, ngày trong tháng 1-31, tháng 1-12 và ngày trong tuần.
Trường | Giá trị | Ý nghĩa |
| Minute | 0 – 59 | Phút |
| Hour | 0 – 23 | Giờ |
| Day of month | 1 – 31 | Ngày trong tháng |
| Month | 1 – 12 | Tháng |
| Day of week | 0 – 7 | Thứ trong tuần, 0 hoặc 7 thường là Chủ nhật |
Ví dụ:
15 8 * * * /home/user/script.shCó nghĩa là chạy script.sh lúc 08:15 mỗi ngày.
Ngoài số cụ thể, Crontab hỗ trợ một số ký tự giúp thiết lập lịch linh hoạt hơn.
Dấu * – tất cả giá trị
* * * * *Nếu đặt dấu * ở trường phút, nghĩa là mọi phút đều phù hợp.
Ví dụ:
* * * * * /home/user/test.shLệnh sẽ được chạy mỗi phút.
Dấu , – danh sách giá trị
0 8,12,18 * * *Tác vụ chạy lúc 08:00, 12:00 và 18:00 mỗi ngày.
Dấu - – phạm vi
0 9 * * 1-5Tác vụ chạy lúc 09:00 từ thứ Hai đến thứ Sáu.
Dấu / – bước nhảy
*/5 * * * *Tác vụ chạy vào các phút 0, 5, 10, 15... của mỗi giờ, thường được diễn giải là chạy mỗi 5 phút. Các biểu thức range, list và step đều được Cron hỗ trợ trong trường thời gian.

Linux cung cấp tiện ích crontab để người dùng quản lý bảng lịch của mình.
crontab -eLệnh này mở Crontab của user hiện tại trong trình soạn thảo văn bản.
Bạn có thể thêm Cron Job mới, ví dụ:
0 3 * * * /home/user/backup.shSau khi lưu file, lịch mới sẽ được áp dụng.
crontab -lLệnh hiển thị toàn bộ Cron Job hiện có của user.
crontab -rLệnh này xóa Crontab của user hiện tại. Cần thận trọng khi sử dụng vì các lịch đang cấu hình có thể bị xóa toàn bộ. Các tùy chọn -e, -l và -r là những chức năng chuẩn của tiện ích crontab.
Hiểu cú pháp sẽ dễ hơn khi áp dụng vào lịch chạy thực tế.
* * * * * /home/user/script.sh*/5 * * * * /home/user/script.sh*/30 * * * * /home/user/script.sh0 * * * * /home/user/script.shVí dụ tác vụ sẽ chạy lúc 10:00, 11:00, 12:00...
0 0 * * * /home/user/script.sh0 2 * * * /home/user/backup.shĐây là lịch thường gặp đối với tác vụ backup hoặc bảo trì server.
0 9 * * 1-5 /home/user/report.sh0 0 * * 0 /home/user/weekly-backup.sh0 0 1 * * /home/user/monthly-report.sh0 8,12,18 * * * /home/user/sync.shTác vụ được thực hiện vào 08:00, 12:00 và 18:00.
Bên cạnh cấu trúc 5 trường thời gian, một số triển khai Cron trên Linux hỗ trợ các shortcut giúp lịch dễ đọc hơn.
Shortcut | Ý nghĩa |
| @reboot | Chạy sau khi hệ thống khởi động |
| @hourly | Chạy mỗi giờ |
| @daily | Chạy mỗi ngày |
| @weekly | Chạy mỗi tuần |
| @monthly | Chạy mỗi tháng |
| @yearly | Chạy mỗi năm |
Ví dụ:
@reboot /home/user/start-service.shScript sẽ được thực thi sau khi hệ thống khởi động và Cron bắt đầu hoạt động.
Hoặc:
@daily /home/user/backup.shThay vì phải tự viết:
0 0 * * * /home/user/backup.shShortcut giúp Crontab ngắn và dễ đọc hơn trong các trường hợp lịch đơn giản.
Crontab có nhiều ứng dụng thực tế trong quản trị hệ thống và vận hành ứng dụng.
Một trong những ứng dụng phổ biến nhất là backup.
Ví dụ:
0 2 * * * /home/user/backup-database.shDatabase có thể được sao lưu tự động lúc 02:00 mỗi ngày, giảm phụ thuộc vào thao tác thủ công.
Tuy nhiên, Crontab chỉ chịu trách nhiệm lên lịch chạy lệnh. Việc bản backup có hợp lệ hay không, được lưu ở đâu, mã hóa thế nào và có thể phục hồi được hay không vẫn cần được kiểm soát bằng quy trình backup phù hợp.
Các file log có thể tăng kích thước liên tục và chiếm nhiều dung lượng lưu trữ. Cron Job có thể được sử dụng để kích hoạt script dọn dẹp định kỳ.
Ví dụ:
0 3 * * 0 /home/user/cleanup.shScript chạy lúc 03:00 Chủ nhật hàng tuần.
Trong hệ thống thực tế, việc quản lý log cũng có thể kết hợp với các công cụ chuyên dụng như logrotate.
Developer có thể sử dụng Crontab để kích hoạt:
python3 /home/user/app/report.pyhoặc:
php /var/www/html/task.phptheo một lịch cố định.
Các tác vụ như tạo báo cáo, xử lý dữ liệu, kiểm tra trạng thái ứng dụng hoặc gửi thông báo đều có thể triển khai theo cách này.
Cron có thể kết hợp với rsync, script hoặc công cụ đồng bộ để chuyển dữ liệu giữa nhiều vị trí.
Ví dụ:
0 */6 * * * /home/user/sync-data.shTác vụ được kích hoạt vào các mốc giờ cách nhau 6 giờ trong ngày.

Đây là điểm dễ gây nhầm lẫn khi mới sử dụng Linux.
Khi chạy:
crontab -ebạn đang chỉnh sửa Crontab của user. Cấu trúc thường là:
minute hour day month weekday commandTrong khi system crontab như /etc/crontab hoặc các file phù hợp trong /etc/cron.d/ có thể thêm trường user:
minute hour day month weekday user commandVí dụ:
0 2 * * * root /usr/local/bin/backup.shVì vậy không nên sao chép nguyên một dòng từ /etc/crontab vào crontab -e mà không kiểm tra cấu trúc. Với system crontab, trường username xuất hiện giữa phần lịch và command; đây là khác biệt quan trọng so với Crontab riêng của người dùng.
Một Cron Job có thể đúng cú pháp nhưng vẫn không hoạt động như mong muốn. Các nguyên nhân thường gặp gồm đường dẫn sai, permission, môi trường chạy khác terminal hoặc Cron service không hoạt động.
Chạy:
crontab -lKiểm tra xem dòng cần chạy có xuất hiện hay không.
Tên service có thể khác nhau tùy bản phân phối Linux.
Ví dụ:
systemctl status cronhoặc:
systemctl status crondNếu service không hoạt động, các tác vụ được cấu hình sẽ không thể chạy theo lịch.
Một lỗi phổ biến là viết:
python script.pyCron chạy trong môi trường khác phiên terminal tương tác, vì vậy không nên giả định PATH và thư mục làm việc giống nhau.
Nên sử dụng:
/usr/bin/python3 /home/user/app/script.pyTương tự, với file Shell Script nên chỉ rõ đường dẫn:
/home/user/scripts/backup.shNếu chạy trực tiếp script, cần đảm bảo file có quyền phù hợp:
chmod +x /home/user/scripts/backup.shĐồng thời kiểm tra user chạy Cron Job có quyền đọc, ghi hoặc truy cập các tài nguyên cần thiết hay không.
Thay vì để lệnh chạy mà không biết kết quả, có thể chuyển output sang file:
0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1Trong đó:
Log giúp xác định script đã được kích hoạt hay thất bại ở bước nào.
Script chạy tốt khi nhập trực tiếp trong terminal chưa chắc chạy tốt bằng Cron.
Nguyên nhân có thể là các biến như:
không được nạp giống phiên shell thông thường.
Do đó, nên khai báo rõ môi trường cần thiết hoặc để script tự thiết lập các dependency trước khi chạy.
Cron dựa vào thời gian của hệ thống hoặc cấu hình liên quan của môi trường Cron. Nếu server sử dụng timezone khác với thời gian bạn dự kiến, Cron Job có thể chạy đúng lịch hệ thống nhưng lại xuất hiện “sai giờ” đối với người quản trị.
Hãy kiểm tra:
timedatectltrước khi kết luận lịch Cron bị lỗi.
Năm dấu * tương ứng với phút, giờ, ngày trong tháng, tháng và thứ trong tuần. Khi tất cả đều là *, Cron Job phù hợp với mọi phút và do đó thường được chạy mỗi phút.
Sử dụng:
*/5 * * * * /path/to/script.shSử dụng:
crontab -lCó. Cron là dịch vụ chạy nền của hệ thống nên Cron Job không phụ thuộc vào việc bạn đang mở phiên SSH hay đã đăng xuất, miễn là dịch vụ Cron và hệ thống vẫn hoạt động.
crontab -e mở bảng Crontab của user hiện tại để chỉnh sửa hoặc bổ sung các Cron Job.
Crontab là bảng chứa lịch và các lệnh. Cron Job là một tác vụ cụ thể được khai báo trong bảng đó.
Ví dụ một Crontab có thể chứa 10 Cron Job khác nhau.
Không. Nếu server không hoạt động tại thời điểm Cron Job được lên lịch, Cron thông thường không thể thực thi tác vụ đó vào thời điểm đã bỏ lỡ. Những yêu cầu cần “chạy bù” sau thời gian downtime cần cơ chế lập lịch phù hợp hơn.
Crontab là công cụ đơn giản nhưng rất hữu ích để tự động hóa các tác vụ định kỳ trên Linux. Chỉ với cấu trúc 5 trường thời gian và một command, người quản trị có thể lên lịch backup, chạy script, đồng bộ dữ liệu, dọn log và thực hiện nhiều công việc vận hành server mà không cần thao tác thủ công.
Khi triển khai Crontab trên môi trường production, cần chú ý quyền truy cập, log, timezone, tài nguyên hệ thống và khả năng chạy chồng lấn giữa các tác vụ. Với các ứng dụng cần hạ tầng Linux linh hoạt và khả năng mở rộng tài nguyên theo nhu cầu, VNPT Cloud Server cung cấp môi trường điện toán đám mây phù hợp để doanh nghiệp triển khai và vận hành các workload, ứng dụng và tác vụ tự động trên cloud.
