Header Ads Widget

Giới thiệu về crontab và ứng dụng

1. Cron là gì?

Cron 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 (CRON TABle) là một file chứa đựng bảng biểu (schedule) của các entries được chạy.

2. Cron làm việc thế nào?

Một cron schedule đơn giản là một text file. Mỗi người dùng có một cron schedule riêng, file này thường nằm ở /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 text editor nào, trừ phi bạn dùng lệnh crontab.
Một số lệnh thường dùng:
crontab -e: tạo hoặc chỉnh sửa file crontab 
crontab -l: hiển thị file crontab 
crontab -r: xóa file crontab
Hầu hết tất 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 -bash: crontab: command not found thì cần tự cài crontab thủ công.

Cài đặt crontab

Sử dụng lệnh:
yum install cronie
Start crontab và tự động chạy mỗi khi reboot:
service crond start
chkconfig crond on

3. 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ỳ, cấu trúc như sau:
*     *     *     *     *     command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)
Nếu một cột được gán ký tự *, nó có nghĩa là tác vụ sau đó sẽ được chạy ở mọi giá trị cho cột đó.
Ví dụ:
– Chạy script 30 phút 1 lần:
30 * * * * command
– Chạy script vào 3 giờ sáng mỗi ngày:
0 3 * * * command

4. Ví dụ cụ thể

Giả sử mình viết một đoạn script sao lưu toàn bộ thư mục /home/domain.com/public_html/ và chuyển file nén .zip vào thư mục /root/ như sau:
#!/bin/bash
zip -r /root/backup_domain.com_$(date +"%Y-%m-%d").zip /home/domain.com/public_html/ -q
Script này lưu lại ở đường dẫn /etc/backup.sh (gán quyền execute – chmod +x nếu là bash script).
Sau đó mình cho script này chạy định kỳ vào 15h thứ Hai và thứ Năm hàng tuần bằng cách tạo một file crontab như sau:
crontab -e
Nhấn o (chữ o) để thêm dòng mới với nội dung:
0 15 * * 1,4 sh /etc/backup.sh
Để lưu lại và thoát bạn nhấn ESC, rồi gõ vào :wq nhấn Enter.
Cuối cùng, nhớ khởi động lại cron daemon:
/etc/init.d/crond restart
Nếu muốn dùng Editor nano sửa cho dễ thì bạn dùng lệnh sau: EDITOR=nano crontab -e

5. Disable email

Mặc định cron gửi email cho người thực thi cron job, nếu bạn muốn tắt chức năng gửi email này đi thì hãy thêm đoạn sau vào cuối dòng
>/dev/null 2>&1
Ví dụ:
0 15 * * 1,4 sh /etc/backup.sh >/dev/null 2>&1

6. Tạo log file

Để lưu log vào file:
30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log
Nếu muốn kiểm tra log có chạy đúng hay không thì thêm đoạn sau vào cuối dòng lệnh
>> /path/to/logfile.log 2>&1


1. Định dạng của Linux Crontab

MIN HOUR DOM MON DOW CMD
FieldGiải thíchGiá trị cho phép
MINphút0 to 59
HOURGiờ0 to 23
DOMNgày trong tháng1-31
MONTháng1-12
DOWNgày tron tuần0-6
CMDLệnhCác lệnh có thể thực hiện.

2.  Tạo một tác vụ hoạt động vào một giờ cụ thể

Giả sử bạn đã tạo một shell script để backup dữ liệu website. Bây giờ ta sẽ thiết lập để cho nó chạy vào ngày 10 tháng 6 lúc 08:30 sáng nhé
30 – phút 30
08 – lúc 8 giờ
10 – ngày mùng 10
06 – tháng 6
* – hàng ngày trong tuần

3.  Tạo 1 tác vụ thực hiện 2 lần trong một ngày

Trong ví dụ này ta sẽ cho một script thực hiện 2 lần vào 11:00 và 16:00 hàng ngày.
00 – phút 00
11,16: 11 giờ sáng và 16 giờ chiều
* – hàng ngày
* – hàng tháng
* – tất cả các ngày trong tuần

4. Tạo một tác vụ chỉ thực hiện vào các giờ cụ thể

Ta sẽ cho script chạy từ 9 giờ sáng tới 6 giờ chiều tất cả các ngày trong tuần
00 – phút 00
09-18 – 9 giờ sáng, 10 giờ sáng, 11 AM, 12 AM, 1 giờ chiều, 2 PM, 3 PM, 4 PM, 5 PM, 6 PM
* – hàng ngày
* – hàng tháng
* – hàng tuần

5. Tạo  một tác vụ chỉ thực hiện vào các giờ cụ thể từ thứ 2 đến thứ 6

00 – phút 00
09-18 – 9 giờ sáng, 10 giờ sáng, 11 AM, 12 AM, 1 giờ chiều, 2 PM, 3 PM, 4 PM, 5 PM, 6 PM
* – hàng ngày
* – hàng tháng
1-5 – thứ 2, thứ 3 , thú 4, thứ 5, thứ 6 (Tất cả các tuần)

6.  Xem các Crontab đã tạo

7.  Cách  chỉnh sửa các crontab

sau khi chỉnh sửa xong bạn thoát ra bằng :wq. dòng thông báo bạn đã edit thành công

8.  Thiết lập tác vụ chạy từng phút

9.  Tạo một tác vụ chạy 10 phút 1 lần

10. Một số giá trị thời gian cho Crontab

KeywordEquivalent
@yearly0 0 1 1 *
@daily0 0 * * *
@hourly0 * * * *
@rebootchạy lúc khởi động.

11.  Tạo một tác vụ chạy vào phút đầu tiên của năm

12.  Tạo một tác vụ chạy vào phút đầu tiên của tháng

Tạo một tác vụ chaỵ hàng ngày
tác vụ xóa log sử dụng cleanup-log shell, bắt đầu lúc 00:00 hàng ngày

13. Tạo một tác vụ chạy khi khởi động lại

@reboot CMD

Có thể sử dụng công cụ Crontab Code Generator để hỗ trợ tạo crontab

Nhận xét