Cron là một tiện ích cơ bản được tìm thấy trên hệ thống Linux và UNIX để chạy các tác vụ trong khoảng thời gian định trước. Việc quản trị hệ thống và phát triển các ứng dụng Linux có thể sử dụng cron sẽ giúp tự động hoá và quản lý tác vụ theo định kỳ. Sử dụng crontab Để xem danh sách các cronjobs của user hiện tại, thực hiện lệnh sau: Mã: crontab -l Ví dụ về kết quả đầu ra như sau: Mã: */20 * * * * /home/username/bin/rebuild-dns-zones */40 * * * * /home/username/bin/delete-session-files >/dev/null 2>&1 */10 * * * * rm /srv/example.com/app/session/* Trong ví dụ này, cron thực hiện những việc sau: - Chạy script rebuild-dns-zones cứ sau hai mươi phút . - Chạy script delete-session-files cứ sau bốn mươi phút, và gửi tất cả kết quả đầu ra, bao gồm các lỗi, vào /dev/null. - Xóa tất cả các file trong thư mục /srv/example.com/app/session/ cứ sau mười phút. Chúng tôi sẽ tìm hiểu từng khía cạnh của các lệnh trên trong tài liệu này. Để chỉnh sửa file crontab của người dùng hiện hành, thực hiện lệnh sau: Mã: crontab -e Điều này sẽ mở một trình soạn thảo văn bản và cho phép bạn chỉnh sửa các crontab. Sử dụng cơ bản cron Các mục trong tập tin crontab có một định dạng cụ thể. Mỗi tác vụ được mô tả trên một và chỉ một dòng. Mỗi dòng bắt đầu với một mô tả khoảng thời gian, và kết thúc bằng một lệnh để chạy vào khoảng thời gian đó. Bạn có thể chạy bất kỳ script, lệnh với cron. Xác định thời gian đối với cron Cú pháp của các mục crontab có thể là một chút rắc rối. Mỗi dòng cron bắt đầu với năm kí tự dấu sao*: Mã: * * * * * Theo thứ tự, các dấu sao đại diện: Phút Giờ Ngày trong tháng Tháng Các thứ trong tuần Phút được quy định như một số từ 0 đến 59. Giờ được quy định như các số từ 0 đến 23. Ngày trong tháng được quy định như các số từ 1 đến 31. Tháng được quy định như các số từ 1 đến 12. Các thứ trong tuần được quy định như số 0-6, với chủ nhật biểu diễn là số 0. Các biểu thức cron đặc biệt Cron cũng cung cấp một số các biểu thức cho phép bạn chỉ định khoảng thời gian lặp lại phức tạp hơn. Được trình bày sau đây: Biểu thức */3 trong cột giờ, sẽ chạy tác vụ quy định tại các thời gian là 12:00, 03:00, 06:00, 09:00, 12:00, 03:00, 06:00 và 09:00 trong một ngày Biểu thức */3 trong cột “ngày trong tháng”, sẽ chạy tác vụ quy định vào ngày 3,6,9,12,15,18,21 và 29 của mỗi tháng. Biểu thức , cho phép bạn chỉ định một danh sách các lần lặp lại. Dấu phẩy tách ra không được chứa khoảng trắng. Ví dụ như 2,3 trong cột tháng sẽ chạy một tác vụ trong tháng 2, tháng 3. Biểu thức - xác định một đoạn các giá trị. Ví dụ 2-4 trong cột tháng sẽ chạy một tác vụ trong tháng 2, tháng 3 và tháng 4. Các cột trong crontab được tách bằng dấu cách, Cú pháp đặc biệt cron Cron có một số cú pháp đặc biệt được trình bày như sau: @yearly và @annually cả hai đều chạy tác vụ quy định vào lúc 12:00 sáng ngày 01 tháng 01 trong mỗi năm. Điều này tương đương với việc xác định thời gian 0 0 1 1 * trên dòng crontab. @daily và @midnight cả hai đều chạy tác vụ mỗi ngày vào lúc 00:00. Điều này tương đương với cú pháp sau: 0 0 * * * trên dòng crontab. @monthly chạy tác vụ mỗi tháng một lần, vào ngày 1 lúc 00:00. Điều này tương đương với cú pháp: 0 0 1 * * trên dòng crontab. @weekly chạy tác vụ mỗi tuần một lần vào lúc 12:00 sáng chủ nhật. Điều này cũng giống như cú pháp 0 0 * * 0 trên dòng crontab. @hourly chạy tác vụ mỗi giờ như (00:00, 01:00, 02:00….). Điều này tương đương với cú pháp : 0 * * * * trên dòng crontab. Cú pháp @reboot chạy lệnh cụ thể một lần, lúc bắt đầu lên. Nói chung tác vụ thời gian khởi động (boot-time) được quản lý bởi các script trong các tập tin /etc/inittab.d, nhưng cú pháp @reboot có thể hữu ích cho những người dùng không có quyền truy cập để chỉnh sửa các init script. Ví dụ về các mục crontab Một số ví dụ về các mục crontab: crontab Mã: 45 16 1,15 * * /opt/bin/payroll-bi-monthly 45 4 * * 5 /opt/bin/payroll-weekly Trong ví dụ đầu tiên, tập tin /opt/bin/payroll-bi-monthly được chạy lúc 4:45 pm (45 16), vào ngày 1 và 15 hàng tháng (1,15). Trong ví dụ thứ hai tập tin /opt/bin/payroll-weekly được chạy lúc 4:45 am (45 4) vào mỗi thứ sáu hàng tuần (4). crontab Mã: 1 0 * * * /opt/bin/cal-update-daily 1 0 */2 * * /opt/bin/cal-update Cả hai tác vụ sẽ chạy lúc 12:01 am (1 0). Tập tin /opt/bin/cal-update-daily sẽ chạy mỗi ngày (như 1,2,3,4,5,….). /opt/bin/cal-update sẽ chạy ngày tiếp theo (như 2,4,6,8,10...). crontab Mã: 0 * * * * /opt/bin/compress-static-files @hourly /opt/bin/compress-static-files /opt/bin/compress-static-files sẽ chạy ở đầu mỗi giờ (cả 2 dòng lệnh trên đều tương đương nhau) Sử dụng nâng cao với Cron Chạy các tác vụ với user khác Bạn có thể sử dụng cron để thường xuyên chạy các tác vụ với một user khác trên hệ thống. Với quyền root, dùng lệnh sau đây: Mã: crontab -u www-data -e Điều này sẽ cho phép bạn chỉnh sửa các crontab sử dụng user www-data. Bạn có thể chạy các tác vụ với user root, hoặc với bất kì user khác trên hệ thống. Điều này rất hữu ích nếu bạn muốn hạn chế khả năng của script đối với các tập tin. Chuyển hướng kết quả đầu ra của tác vụ Theo mặc định, cron sẽ gửi email đến hộp thư điện tử của user đã tạo ra các tác vụ. Bất kỳ kết quả hoặc lổi nào cũng sẽ được gửi. Nếu bạn không quan tâm về kết quả đầu ra, bạn có thể chuyển hướng này đến /dev/null. Thêm câu lệnh sau vào cuối mỗi dòng trong tập tin crontab của bạn: Mã: >/dev/null Nếu script của bạn tạo ra một lỗi, cron vẫn sẽ gửi lỗi tới email của bạn. Nếu bạn muốn bỏ qua tất cả các kết quả đầu ra, ngay cả các thông báo lỗi, thêm dòng sau vào cuối các dòng trong tập tin crontab của bạn: Mã: >/dev/null 2>&1 Trong khi điều này có thể làm sạch hộp email của bạn khỏi các email không mong muốn, chuyển hướng kết quả đầu ra tất cả vào /dev/null có thể khiến bạn bỏ lỡ các lỗi quan trọng nếu có điều gì sai khi một tác vụ chạy.