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.

  • Trình nền Cron: Quá trình nền cron đọc các tệp crontab và chạy từng tác vụ đã lên lịch vào đúng phút bạn đã thiết lập.
  • 🗂️ Định dạng Crontab: Năm trường thời gian — phút, giờ, ngày trong tháng, tháng và ngày trong tuần — đứng trước lệnh cần thực thi.
  • 🇧🇷 Việc làm biên tập: Sử dụng lệnh crontab -e để thêm hoặc thay đổi tác vụ, crontab -l để liệt kê chúng và crontab -r để xóa chúng.
  • 🔁 Chuỗi ký tự đặc biệt: Các phím tắt như @reboot, @daily, @weekly và @hourly thay thế năm trường thời gian cho các lịch trình thông thường.
  • 📅 Ví dụ thực tế: Các mục có sẵn bao gồm các tùy chọn cứ sau năm phút, các ngày cụ thể trong tuần, các chu kỳ hàng tháng và các nhiệm vụ khởi động.
  • 🤖 Hỗ trợ AI: Các trợ lý AI và GitHub Copilot có thể tạo và giải thích các biểu thức cron chỉ trong vài giây.

Crontab trong lập lịch tác vụ Linux kèm ví dụ

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.

Sơ đồ định dạng crontab của Linux hiển thị năm trường thời gian và lệnh.

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

Câu Hỏi Thường Gặp

Các tệp crontab của người dùng được lưu trữ trong /var/spool/cron/ (hoặc /var/spool/cron/crontabs/ trên Debian và Ubuntu), trong khi lịch trình toàn hệ thống nằm trong /etc/crontab và thư mục /etc/cron.d. Luôn chỉnh sửa crontab của người dùng bằng lệnh crontab -e thay vì mở trực tiếp các tệp đó.

Cron chỉ chạy các tác vụ vào đúng thời gian đã lên lịch và bỏ qua chúng nếu máy bị tắt nguồn. Anacron tracks sẽ ghi nhớ các tác vụ bị bỏ lỡ và chạy lại chúng sau khi hệ thống khởi động lại, vì vậy nó phù hợp với máy tính xách tay và máy tính để bàn không phải lúc nào cũng hoạt động.

Cron sử dụng môi trường tối thiểu, vì vậy việc biến môi trường PATH bị giới hạn thường là nguyên nhân gây ra lỗi. Hãy sử dụng đường dẫn tuyệt đối cho các lệnh và tập lệnh, cấp quyền thực thi cho tập lệnh và chuyển hướng đầu ra đến một tệp nhật ký để bạn có thể ghi lại bất kỳ lỗi nào để gỡ lỗi.

Thêm >> /path/to/logfile 2>&1 vào cuối lệnh để ghi lại đầu ra chuẩn và lỗi vào một tệp. Hoặc, thiết lập biến MAILTO ở đầu crontab để cron gửi email đầu ra của mỗi tác vụ đến địa chỉ đó.

Các tệp /etc/cron.allow và /etc/cron.deny kiểm soát quyền truy cập. Nếu tệp cron.allow tồn tại, chỉ những người dùng được liệt kê trong đó mới được phép sử dụng crontab. Nếu chỉ có tệp cron.deny tồn tại, mọi người dùng ngoại trừ những người được liệt kê đều được phép lên lịch các tác vụ.

Một crontab người dùng được tạo bằng lệnh `crontab -e` có năm trường thời gian, theo sau là lệnh. Tệp hệ thống `/etc/crontab` thêm một trường đặt tên người dùng chạy tác vụ, theo thứ tự phút, giờ, ngày, tháng, ngày trong tuần, tên người dùng, sau đó là lệnh.

Đúng vậy. Các công cụ học máy có thể thiết lập mức thời gian chạy và thời gian hoàn thành công việc bình thường làm cơ sở, sau đó gắn cờ các bất thường như công việc chạy quá lâu, thất bại không báo lỗi hoặc trễ so với lịch trình. Phân tích nhật ký bằng AI cũng nhóm các lỗi liên quan lại với nhau để đẩy nhanh quá trình tìm ra nguyên nhân gốc rễ.

Vâng. Trợ lý GitHub Có thể tạo ra các biểu thức cron từ một bình luận bằng tiếng Anh thông thường, giải thích chức năng của một lịch trình như */5 * * * * và soạn thảo kịch bản shell mà một tác vụ sẽ chạy. Luôn kiểm tra biểu thức trước khi thêm nó vào crontab sản xuất.

Tóm tắt bài viết này với: