Lệnh Cron (Crontab) trong Linux [11 ví dụ]

Trong bài viết này, chúng ta sẽ xem xét và tìm hiểu cách lập lịch và thực hiện các tác vụ Linux trong nền tảng tự động ở khoảng thời gian đều đặn bằng cách sử dụng lệnh Crontab.

Xử lý một công việc thường xuyên một cách thủ công là một công việc khó nhằn đối với các quản trị viên hệ thống và những công việc như vậy có thể được lập lịch và thực hiện một cách tự động trong nền tảng mà không cần can thiệp của con người bằng cách sử dụng cron daemon trong hệ điều hành Linux hoặc Unix-like.

Ví dụ, bạn có thể tự động hóa sao lưu hệ thống Linux, lập lịch cập nhật và đồng bộ hóa tệp tin, và nhiều hơn nữa bằng cách sử dụng Cron daemon, mà được sử dụng để thực thi các tác vụ được lập lịch từ dòng lệnh hoặc sử dụng các công cụ trực tuyến để sinh các tác vụ cron.

Cron được kích hoạt mỗi phút và kiểm tra các tác vụ được lập lịch trong Crontab (CRON TABle), đây là một bảng chúng ta có thể lập lịch cho các tác vụ lặp lại như vậy.

Mẹo: Mỗi người dùng có thể có cron riêng của họ để tạo, sửa đổi và xóa các tác vụ. Mặc định, cron được bật cho người dùng, tuy nhiên, chúng ta có thể hạn chế người dùng bằng cách thêm một mục trong tệp /etc/cron.deny.

Crontab trên Linux

Tệp Crontab bao gồm các lệnh trên mỗi dòng và thực sự có sáu trường và được phân tách bằng khoảng trắng hoặc tab. Năm trường đầu tiên biểu thị thời gian để chạy tác vụ và trường cuối cùng là lệnh.

  • Phút (giá trị từ 0-59)
  • Giờ (giá trị từ 0-23)
  • Ngày trong tháng (giá trị từ 1-31)
  • Tháng trong năm (giá trị từ 1-12 hoặc Jan-Dec, bạn có thể sử dụng ba chữ cái đầu tiên của tên mỗi tháng như Jan hoặc Jun.)
  • Ngày trong tuần (giá trị từ 0-6 hoặc Sun-Sat, ở đây bạn cũng có thể sử dụng ba chữ cái đầu tiên của tên mỗi ngày như Sun hoặc Wed.)
  • Lệnh - đường dẫn/tới/lệnh hoặc tập lệnh bạn muốn lập lịch.

1. Liệt kê Các Mục Crontab

Liệt kê hoặc quản lý các tác vụ với lệnh crontab sử dụng tùy chọn -l cho người dùng hiện tại.

# crontab -l

00 10 * * * /bin/ls >/ls.txt

2. Sửa Mục Crontab

Để sửa mục crontab, sử dụng tùy chọn -e như dưới đây. Ví dụ dưới đây sẽ mở các công việc định biểu trong trình soạn thảo VI. Hãy thực hiện các thay đổi cần thiết và thoát bằng cách nhấn các phím :wq để lưu thiết lập tự động.

# crontab -e

3. Liệt kê Các Tác Vụ Định Biểu Của Người Dùng

Để liệt kê các công việc định biểu của một người dùng cụ thể có tên tecmint, sử dụng tùy chọn -u (Người dùng) và -l (Liệt kê).

# crontab -u tecmint -l

no crontab for tecmint

Lưu ý: Chỉ người dùng root mới có đầy đủ quyền để xem các mục crontab của người dùng khác. Người dùng thông thường không thể xem các mục của người khác.

4. Xóa Mục Crontab

Cảnh báo: Crontab với tham số -r sẽ xóa toàn bộ các công việc định biểu mà không có xác nhận từ Crontab. Sử dụng tùy chọn -i trước khi xóa mục crontab của người dùng.

# crontab -r

5. Nhắc Nhở Trước Khi Xóa Mục Crontab

Crontab với tùy chọn -i sẽ yêu cầu xác nhận từ người dùng trước khi xóa mục crontab của người dùng.

# crontab -i -r

crontab: really delete root's crontab?

6. Ký Tự Đặc Biệt Cho Lịch Trình(*, -, /, ?, #)

  • Dấu sao(*) - Phù hợp với tất cả các giá trị trong trường hoặc bất kỳ giá trị nào có thể.
  • Dấu gạch ngang(-) - Để xác định một phạm vi.
  • Dấu gạch chéo (/) - Trường thứ nhất /10 có nghĩa là từng mười phút hoặc tăng theo phạm vi.
  • Dấu phẩy (,) - Để phân tách các mục.

7. Lập Lịch Hệ Thống Toàn Cục

Một quản trị viên hệ thống có thể sử dụng thư mục cron được xác định trước như được hiển thị dưới đây.

  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly
  • /etc/cron.weekly

8. Lập Lịch Cho Một Thời Gian Cụ Thể

Công việc dưới đây xóa các tệp và thư mục trống từ /tmp vào lúc 12:30 am hàng ngày. Bạn cần chỉ định tên người dùng để thực hiện lệnh crontab. Trong ví dụ dưới đây, người dùng root đang thực hiện công việc cron.

# crontab -e

30 0 * * *   root   find /tmp -type f -empty -delete

9. Chuỗi Đặc Biệt Cho Lịch Trình Thông Thường

Chuỗi Ý nghĩa
@reboot Lệnh sẽ chạy khi hệ thống khởi động lại.
@daily Một lần mỗi ngày hoặc có thể sử dụng @midnight.
@weekly Một lần mỗi tuần.
@yearly Một lần mỗi năm, chúng ta cũng có thể sử dụng từ khóa @annually.

Cần thay thế năm trường của lệnh cron bằng từ khóa nếu muốn sử dụng chúng.

10. Nhiều Lệnh với Double ampersand(&&)

Trong ví dụ dưới đây, command1 và command2 chạy hàng ngày.

# crontab -e

@daily  && 

11. Tắt Thông Báo Email

Mặc định, cron gửi email đến tài khoản người dùng thực thi cronjob. Nếu bạn muốn tắt nó, thêm công việc cron của bạn giống như ví dụ dưới đây. Sử dụng tùy chọn >/dev/null 2>&1 ở cuối tệp sẽ chuyển hướng tất cả kết quả của cron đến /dev/null.

[root@tecmint ~]# crontab -e
* * * * * >/dev/null 2>&1

Kết luận: Tự động hóa các tác vụ có thể giúp chúng ta thực hiện công việc một cách tốt hơn, không lỗi và hiệu quả hơn. Bạn có thể tham khảo trang chỉ dẫn của crontab để biết thêm thông tin bằng cách nhập lệnh "man crontab" trong cửa sổ terminal.