Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cấu hình Cron Job với Crontab trên CentOS/RHEL Linux

Cron là bộ lập lịch tác vụ cho các hệ thống Unix bao gồm tất cả bản phân phối Linux. Daemon cron chạy ngầm trên máy chủ và chạy tác vụ theo lịch trình. Trong bài này, chúng tôi sẽ chỉ cách cài đặt cron trên máy chủ chạy CentOS hoặc RHEL Linux, học cú pháp cron, và lên lịch cron job với crontab.

Cách cài đặt Cron trên CentOS hoặc RHEL Linux?

Mặc định, cron có sẵn ngay sau cài đặt RHEL hoặc CentOS. Nếu vì lý do nào bạn không có, bạn có thể cài từ kho cơ bản bằng yum hoặc dnf:

# dnf update -y — cập nhật tất cả gói trên máy chủ
# dnf install crontabs -y — cài cron

Cấu hình Cron Job với Crontab trên CentOS/RHEL Linux

Kích hoạt daemon crond và chạy sau cài đặt:

# systemctl enable crond.service
# systemctl start crond.service

Cách thêm Cron Job với Crontab?

Bạn có thể dùng lệnh sau để thêm tác vụ vào cron:

# crontab -e

Lệnh này sẽ mở file tác vụ cho user của bạn trong trình soạn thảo mặc định (là vim trong trường hợp của tôi, nhưng bạn có thể đổi sang cái thuận tiện hơn, ví dụ nano). Cách này ngăn lỗi cú pháp. Crontab không cho lưu file config chứa lỗi.

Bạn cũng có thể chỉnh sửa file cron job thủ công trong mc:

# mcedit /var/spool/cron/root – tên file có thể khác tùy user.

Để thêm job đơn giản chạy script bash trong cron, nhập lệnh:

# crontab -e

Sau đó thêm lịch trình tác vụ và đường dẫn file script:

* * * * * /root/test.sh

Lưu file (tương tự chỉnh sửa trong vim: nhấn Ctrl+O lưu file và Ctrl+X thoát).

Nếu làm đúng, tác vụ sẽ được thêm vào cron. Để hiển thị danh sách cron job, chạy:

# cat /var/spool/cron/root
* * * * * /root/test.sh

Hoặc lệnh này:

# crontab -l

Script này sẽ chạy qua cron mỗi phút.

Thời gian tối thiểu là 1 phút. Daemon cron quét danh sách tác vụ mỗi phút. Nó kiểm tra các file và thư mục sau:

/etc/crontab
/etc/cron.*/
/var/spool/cron/

Mỗi entry lịch trình crontab gồm 5 trường:

phút giờ ngày_của_tháng tháng ngày_của_tuần
# Ví dụ định nghĩa job:
# .---------------- phút (0 - 59)
# | .------------- giờ (0 - 23)
# | | .---------- ngày của tháng (1 - 31)
# | | | .------- tháng (1 - 12) HOẶC jan,feb,mar,apr ...
# | | | | .---- ngày của tuần (0 - 6) (Chủ nhật=0 hoặc 7) HOẶC sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

Cấu hình Cron Job với Crontab trên CentOS/RHEL Linux

Bạn có thể dùng các giá trị hợp lệ sau cho từng trường:

Trường Phạm vi giá trị
Phút 0-59
Giờ 0-23
Ngày của tháng 1-31
Tháng 1-12 hoặc jan feb mar apr may jun jul aug sep oct nov dec
Ngày của tuần 0-6 (trong đó 0 là Chủ nhật) hoặc sun mon tue wed thu fri sat

Ký tự * nghĩa là tất cả giá trị cho phép. Đây là tác vụ mẫu:

30 00 * * 1 /root/test.sh

Script trong tác vụ sẽ chạy mỗi Thứ Hai lúc 00:30 AM.

Để cú pháp file cron dễ dàng hơn, một số ký tự đặc biệt được dùng:

  • Dấu phẩy (,) dùng để tách giá trị lịch trình để chạy cùng tác vụ ở thời điểm khác nhau. Ví dụ, nếu muốn chạy tác vụ lúc phút 15 và 30 mỗi giờ, đặt lịch trình:
15 * * * *
30 * * * *

Hoặc dùng cú pháp ngắn với dấu phẩy:

15,30 * * * *
  • Dấu gạch chéo (/) dùng để lặp lại tác vụ. Ví dụ, muốn chạy tác vụ mỗi 2 giờ. Dùng / sẽ làm file cron ngắn gọn hơn, nếu không khá dài:
* */2 * * *
  • Dấu gạch ngang (-) chỉ phạm vi giá trị trong trường. Nếu muốn chạy tác vụ 10 phút đầu hoặc cuối giờ, chỉ định phạm vi bằng dấu gạch ngang:
0-10 * * * *
50-60 * * * *

Dưới đây là thêm ví dụ lịch cron:

  • chạy vào ngày thường lúc 12:00 PM và 06:00 PM: 0 12,18 * * 1-5
  • mỗi 30 phút: */30 * * * *
  • mỗi Thứ Bảy: 0 0 * * 6
  • mỗi Thứ Ba và Thứ Năm lúc 02:00 AM: 0 2 * * 2,4

Bạn cũng có thể dùng biến đặc biệt trong cron.

Biến Mô tả Cú pháp
@reboot Chạy một lần khi boot
@yearly hoặc @annually Một lần một năm 0 0 1 1 *
@monthly Một lần một tháng 0 0 1 * *
@weekly Một lần một tuần 0 0 * * 0
@daily Mỗi ngày 0 0 * * *
@hourly Mỗi giờ 0 * * * *
@midnight Lúc nửa đêm

Điều này nghĩa là để chạy tác vụ mỗi ngày, bạn có thể dùng cú pháp cron:

@daily echo "Cron check"

Bạn có thể chỉnh sửa file crontab của user khác:

# crontab -u username

Cách gửi thông báo Cron qua Email?

Nếu muốn nhận thông tin về chạy tác vụ crontab qua email, cấu hình file cron với job.

Để gửi email, mail agent phải cài trên máy chủ. Để test, tôi cài sendmail trên máy Linux:

# dnf install sendmail -y
# service sendmail start

Hãy cấu hình tham số gửi email trong file cron. Thêm các dòng sau vào file:

MAILTO="youremail@gmail.com"
SHELL=/bin/bash
HOME=/
* * * * * echo "Cron check"

SHELL — shell của user

HOME — đường dẫn đến file cron

Cấu hình Cron Job với Crontab trên CentOS/RHEL Linux

Mỗi lần cron job chạy, thông báo email sẽ gửi đến hộp thư.

Bạn có thể lưu thông tin chạy tác vụ cron vào file log. Làm vậy, thêm >> vào cuối file và nhập đường dẫn file log:

* * * * * echo "Cron check" >> /var/log/admin/journal.log

Nếu nhiều job trong file crontab, và bạn không muốn nhận kết quả một số job qua email, chạy các job đó ở chế độ im lặng:

* * * * * echo "Cron check" >> /dev/null 2>&1

File cấu hình & Log Cron

File cấu hình cron chính là /etc/crontab. Ngoài file cron, bạn có thể chạy job từ các thư mục:

  • /etc/cron.daily – chạy script một lần một ngày
  • /etc/cron.hourly – …. một lần một giờ
  • /etc/cron.monthly – …. một lần một tháng
  • /etc/cron.weekly – …. một lần một tuần

Chỉ cần đặt file script vào một thư mục để chạy theo lịch trình.

Bạn có thể hạn chế truy cập bộ lập lịch bằng /etc/cron.allow và /etc/cron.deny. Đủ tạo file và thêm user vào, người được phép hoặc cấm chạy tác vụ cron.

Bạn cũng có thể thêm job vào /etc/crontab. Thường file này dùng bởi root hoặc cấu hình tác vụ hệ thống. File cron job cá nhân user lưu trong /var/spool/cron/ hoặc /var/cron/tabs/.

Để theo dõi cron job hoặc lỗi, xem file log: /var/log/cron. File này ghi lại tất cả tác vụ và lỗi hoạt động daemon nếu có:

Cấu hình Cron Job với Crontab trên CentOS/RHEL Linux