Tìm hiểu về Cronjob và Crontab

Cron là gì

Tương tự như với Windows, Linux cũng có cách để tạo và chạy các lệnh theo một chu kỳ xác định.
Ở Windows nó gọi là Task Schedule, còn với Linux là Cron

Cronjob là các lệnh thực thi hành động đặt trước vào thời điểm nhất định

Crontab là nơi lưu trữ các cronjob

Câu lệnh và cách thêm cronjob

Trước hết kiểm tra crontab đã được cài đặt hay chưa, nhưng hiếm khi nó không được cài đặt

yum -y install cronie

Các lệnh của Cron

Cú pháp cron [lệnh]

-u : xác định user sẽ chạy cron (nếu không muốn chạy = tài khoản đang dùng)

-e : chỉnh sửa file crontab – nội dung bài viết tập trung ở đây

-l : hiển thị danh sách các cronjob đang nằm trong crontab của user đó

-r : xóa crontab của 1 user. tùy chọn thêm: -i : hỏi trước khi thực hiện

Cấu trúc của Cronjob

Cronjob được xác định bởi 5 khoảng thời gian: Phút – Giờ – Ngày – Tháng – Ngày trong tuần(T2 > CN)

A B C D E [LỆNH CẦN THỰC THI]
- - - - -
| | | | |
| | | | +----- Ngày trong tuần (0 - 6) (Bắt đầu với Chủ Nhật - 0)
| | | +------- Tháng (1 - 12)
| | +--------- Ngày trong tháng (1 - 31)
| +----------- Giờ (0 - 23)
+------------- Phút (0 - 59)

Chú thích kỹ hơn về nhưng điều này

Mốc A : Phút

Đây là xác định cronjob sẽ chạy ở phút thứ mấy, dùng * sẽ chạy lở mọi mốc thời gian. dùng dấu , để tùy chọn các giá trị khác nhau như 1,21,40 thì cron sẽ chạy ở phút 1, phút 20 và phút 40. Dùng - để xác định một khoảng thời gian, như 1-10thì sẽ chạy mỗi phút từ phút 1> phút 10. Có thể kết hợp 2 cái này lại: 1,5,10-20: Chạy ở phút 1 và phút 5, và mỗi phút từ phút 10 > 20

Mốc B: Giờ

Đây là xác định cronjob sẽ chạy ở giờ thứ mấy, dùng * sẽ chạy lở mọi mốc thời gian. dùng dấu , để tùy chọn các giá trị khác nhau như 1,21 thì cron sẽ chạy ở 1h sáng và 9h tối. Dùng – để xác định một khoảng thời gian, như 1-10thì sẽ chạy mỗi giờ từ 1h sáng đến 10h sáng. Có thể kết hợp 2 cái này lại.

Ngoài ra, có thể dùng thêm */[x] để chia khoảng thời gian chạy. Ví dụ: */2chạy mỗi 2h */5chạy mỗi 5h – Kể từ lúc tạo cron này

Móc C: Ngày

Tương tự với giờ. Ngày có giới hạn từ 1-31, tháng nào 30 ngày thì nó tự qua 😀

Mốc D: Tháng

Tương tự 2 mốc B và C

Có thể dùng thêm viết tắt các tháng bằng tiếng anh như JAN/DEC ….

Mốc E: Ngày trong tuần

Cho phép dùng từ 0 > 6, và thêm viết tắt của các thư trong tuần như MON-SUN

Bên cạnh đó có thể dùng để tạo cronjob chạy cách ngày như */2 – chạy cách mỗi 2 ngày

Lưu ý

Hãy cẩn thận với đấu * nó có nghĩa là chạy mỗi phút/giờ/ngày, không quan trọng nhưng gì phía sau. như * 12 * * * sẽ là chạy liên tục mỗi phút ở 12h mọi ngày

Còn nếu muốn đặt chạy một lần, hãy đưa một số cụ thể vào thay vì dấu *

Ví dụ

Chạy mỗi 15 phút: */15 * * * * [lệnh]

Chạy lúc 21giờ tại phút 0: 0 21 * * * [lệnh]

Phức tạp hơn

Chạy mỗi 30 phút từ 9h sáng > 3h chiều cách mỗi 2 ngày: 30 9-15 */2 * * [lệnh] hoặc 30 9-15 * * */2 [lệnh]

Cụ thể hơn với lệnh xóa cache, chạy mỗi ngày:

0 0 1 * * sync; echo 3 > /proc/sys/vm/drop_caches

 

Các lệnh nâng cao

Các biến thể của thời gian, có thể không hoạt động

@reboot sau khi khởi động lại

@hourly mỗi giờ

@daily mỗi ngày

@weekly mỗi tuần

@monthly mỗi tháng

@annually @yearly mỗi năm

Các lệnh này thêm vào phía sau [lệnh]

> /dev/null 2>&1ngăn chạy cronjob gởi mail đến user khi thực hiện xong 0 0 1 * * sync; echo 3 > /proc/sys/vm/drop_caches > /dev/null 2>&1

> /root/cronjob.log Tạo file log ghi lại hoạt động 0 0 1 * * sync; echo 3 > /proc/sys/vm/drop_caches > /root/cronjob.log

Cách thêm cronjob vào crontab

Sau khi viết xong lệnh rồi, thì đến lúc thêm vào cho nó chạy, ta sử dụng crontab -e

Thêm lệnh vào một hàng và lưu file cron lại với lệnh :wq

Add Comment