Tìm hiểu về Crontab trên Linux

Tác giả: 14/09/2022

1. Crontab là gì ?

Crontab (Cron table) là một tiện ích cho phép thực hiện các tác vụ một cách tự động theo định kỳ, ở chế độ nền của hệ thống. Crontab giúp cho người dùng lập lịch trình với mục đích chạy các dòng lệnh từ phía server để nhằm thực thi một hoặc nhiều công việc theo một khung thời gian đã được thiết lập sẵn.

2. Cách thức hoạt động của Crontab

Một cron schedule đơn giản chính là 1 file text.

Mỗi một người dùng đều sẽ có cho mình 1 cron schedule riêng. File này thường nằm ở vị trí /var/spool/cron

Crontab files không cho phép bạn tạo hoặc chỉnh sửa trực tiếp với bất kì trình soạn thảo văn bản nào trừ khi bạn sử dụng lệnh crontab.

3. Một số lệnh thường dùng

crontab -e: Tạo, chỉnh sửa các crontab <-e = "Edit">

crontab -l: Xem các Crontab đã tạo <-l = "List">

crontab -r: Xóa file crontab <-r = remove>

Hầu hết các VPS đều được cài đặt sẵn crontab, tuy nhiên vẫn có trường hợp VPS không có. Nếu bạn sử dụng lệnh crontab -l mà thấy output trả lại là -bash: crontab command not found thì cần tự cài crontab thủ công.

4. Cài đặt crontab

yum install cronie

Start crontab và cho phép crontab khởi động cùng hệ thống.

service crond start

chkconfig crond on

5. Cấu trúc của crontab

Một crontab file có 5 trường xác định thời gian, cuối cùng là lệnh sẽ được chạy định kỳ, nó sẽ dựa vào thời gian của hệ thống để thực hiện. Các lệnh được thực hiện khi thời gian được chỉ định khớp với thời gian của hệ thống. Cú pháp như sau:

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

6. Các trường thời gian trong Crontab

Mỗi lệnh Cron Job có 5 trường thời gian và ngày tháng, các trường sẽ dựa vào thời gian của hệ thống để thực hiện. Các lệnh được thực thi khi thời gian, ngày khớp với thời gian của hệ thống.

Trường Giá trị cho phép
Phút 0 – 59
Giờ 0 – 23
Ngày trong tháng 1 – 31
Tháng 1 – 12
Ngày trong tuần 0 – 6 (0 tương ứng với chủ nhật)
Lệnh Lệnh thực hiện

 

>> Nếu một trường có giá trị là ký tự * , thì trường đó sẽ được lấy toàn bộ giá trị. Ví dụ khi đặt giá trị * trong trường tháng, nó có nghĩa là hàng tháng từ tháng 1 đến tháng 12.

7. Một số ví dụ và cú pháp

Cron Job Ý nghĩa
0 0 * * * /home/user/script.sh Thực thi file script.sh vào lúc 0 giờ 0 phút hàng ngày
0 8,20 * * * /home/user/script.sh Thực thi file script.sh vào lúc 8 giờ và 20 giờ hàng ngày
0 */8 * * * /home/user/script.sh Thực thi file script.sh 8 giờ một lần
*/30 * * * * /home/user/script.sh Thực thi file script.sh 30 phút một lần
0 8 1 */3 * /home/user/script.sh Thực thi file script.sh 3 tháng 1 lần vào ngày đầu tiên của tháng lúc 8 giờ
0 0 * * * 6 /home/user/script.sh Thực thi file script.sh vào lúc 0 giờ 0 phút thứ 7 hàng tuần
0 0 16 9 * /home/user/script.sh Thực thi file script.sh vào lúc 0 giờ 0 phút ngày 16 tháng 9
0 0 1 * * /home/user/script.sh Thực thi file script.sh vào lúc 0 giờ 0 phút ngày đầu tiên hàng tháng
10-59/10 8 * * * Thực thi file script.sh 10 phút 1 lần bắt đầu từ 8 giờ 10 phút sáng
@reboot /home/user/script.sh Thực thi file script.sh sau khi reboot hệ thống

Đầu ra của lệnh sẽ được gửi đến tài khoản email cục bộ của bạn. Vì vậy nếu bạn không muốn nhận những email này bạn có thể thêm đoạn /dev/null 2>&1 vào cú pháp. Ví dụ:

0 0 * * * /home/user/script.sh > /dev/null 2>&1

Nếu bạn muốn gửi đầu ra đến một địa chỉ email cụ thể thì bạn có thể thêm MAILTO theo sau là địa chỉ email muốn nhận. Ví dụ:

MAILTO = "crontab@nhanhoa.com.vn"

0 0 * * * /home/user/script.sh > /dev/null 2>&1

Ngoài ra các bạn có thể xem thêm các ví dụ bằng bằng cách thay đổi các giá trị trong cú pháp tại trang sau

8. Quyền của Cron

Để cho phép người dùng truy cập Crontab, các tệp /etc/cron.allow/etc/cron.deny có thể được sử dụng để cho phép hoặc từ chối quyền truy cập tương ứng. Ta chỉ cần đặt tên của người dùng vào một trong hai tệp để cho phép hoặc từ chối quyền truy cập của người dùng đó vào Crontab.

Mặc định chỉ tồn tại tệp trống /etc/cron.deny

 

Hy vọng bài viết Tìm hiểu về Crontab trên Linux này sẽ giúp ích được cho các bạn. Hẹn gặp lại các bạn trong các bài viết tiếp theo tại wiki.nhanhoa.com

 

Trả lời