Lập lịch bằng Crontab trong linux ( Hướng dẫn sử dụng Crontab)


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:
Quote:
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
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:
Code:
* * * * * 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 đó.

4. Ví dụ
Giả sử tôi viết một đoạn script backup bookmarks trong Firefox như sau:
Code:
#!/bin/bash
date=`date +%F`

cp ~/.mozilla/firefox/13kee53o.default/bookmarks.html /mnt/data/BACKUP/bookmarks-$date.html
sau đó tôi 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:
Code:
$ crontab -e
0 15 * * 1,4 sh /mnt/data/linux/code/backupbookmarks.sh
Cuối cùng, nhớ khởi động lại cron daemon:
Code:
/etc/init.d/crond restart
ps: Để muốn “test” ngay xem crontab nó có hoạt động không, bạn có thể sửa lại đoạn script trên một chút:
Code:
#!/bin/bash
date=`date +%F-%H-%M-%S`

cp ~/.mozilla/firefox/13kee53o.default/bookmarks.html /mnt/data/BACKUP/bookmarks-$date.html
và file crontab bạn sẽ cho backup liên tục theo từng phút như sau:
Quote:
0-59 * * * * sh /mnt/data/linux/code/backupbookmarks.sh

Bạn có thể chỉnh sửa file crontab trong Linux luôn bằng cách xài Software GNU Midnight Commander.
Ngoài ra bạn cũng có thể tạo File crontab (không có đuôi) trên máy Windows (cách này thường dùng trong trường hợp máy chủ là Linux máy con là Windows) bằng chương trình NOTEPAD rồi dùng Software WinSCP chuyển qua máy Linux.
Lưu ý sau khi chuyển qua máy Linux phải chạy lênh “dos2unix ‘pathfile'” để chuyển sang loại file Linux đọc được.

5. Hướng dẫn sử dụng Crontab

Là một lệnh shell được sử dụng trong linux với mục đích lập thời gian biểu tự động chạy một ứng dụng cụ thể nào đó hoặc để thực hiện tự động 1 nhiệm vụ nào đó mà người dùng định nghĩa. Khi thực hiện khai báo lệnh này cần chú ý về thời gian thực hiện, tránh thực hiện những lệnh backup data hay restart service trong thời gian nhạy cảm của hệ thống: thời gian có nhiều tiến trình đang hoạt động, có nhiều kết nối từ bên ngoài vào …

  • Nội dung

Là một lệnh shell được sử dụng trong linux với mục đích sử dụng thời gian biểu tự động chạy một ứng dụng cụ thể nào đó hoặc để thực hiện tụ động 1 nhiệm vụ nào đó mà người dùng định nghĩa.
Thường được dùng để backup hoặc xóa các file tạm được sinh ra trong quá trình vận hành hệ thống… được định nghĩa trong file /etc/crotab.
Cú pháp câu lệnh Crontab

Ví dụ:
Để xóa file home/someuser/tmp/ vào lúc 18h45 hàng ngày ta dùng lệnh sau:
4518***User rm/home/someuser/tmp/*
4518***Là thời gian thực hiện
User là user thực hiện
rm/home/someuser/tmp/* Công việc thực hiện

Các bước tiến hành như sau:

Bước 1: Khở động terminal của máy muốn thực hiện.

Bước 2: Dùng lệnh cd để truy cập vào thư mục /etc


Bước 3: Mở file crontab bằng lệnh vi or vim trong linux để cấu hình

Bước 4: Tiến hành thiết đặt các thông số cần thiết

Bước 5: Save file crontab và thực hiện restart lại dịch vụ crontab bằng lệnh sau:
service crond restart

  • Thực hiện nhiều nhiệm vụ

Nếu như ta thực hiện cùng lúc 1 gói các lệnh thì ta nên tạo ra một file_crontab.sh để thực hiện cùng nhiều lệnh (tương đương với file.bat trong windows)
Ví dụ:
Bước 1: Ta tiến hành tạo một file file_crontab.sh có nội dung như sau bằng lệnh vi (vim)

mkdir -p/root/test
cp/tmb/* /root/test
cd/root/test
taz -cvf test.tar/root/test/*
cp/root/test/test.tar/home/someuser/tmp

Bước 2: Tiến hành thiết lập cấu hình cho file crontab the trình tự các bước ở phần trên rồi khởi động lại.
– Thêm dòng này vào file crontab.

0020***root sh/path/file_crontab.sh

– Restart lại dịch vụ crontab

Ví dụ lập lịch backup mysql lúc 4 giờ sáng hàng ngày

Giả sử một đoạn script backup database MySQL như sau:

#!/bin/bash
DB=db_gocit_bk_`date +%Y%m%d-%H%M`.sql
/usr/bin/mysqldump -u root –password=’password_gocit’ –databases gocit -R > /backup/database/$DB
gzip /backup/database/$DB

Sau đó cho script này chạy định kỳ vào 4h sáng hàng ngày bằng cách tạo một file crontab như sau:

# crontab -e
0 4 * * * /bin/sh /backup/backup.sh >/dev/null

Cuối cùng, nhớ kiểm tra dịch vụ cron daemon

# /etc/init.d/crond status

Nếu crontab chưa khởi động thì khởi động bằng lệnh

# /etc/init.d/crond start
# chkconfig crond on

Ví dụ lập lịch khởi động lại dịch vụ httpd hàng giờ

Giả sử một đoạn script backup database MySQL như sau:

Tạo file autorestart.sh với nội dung sau

#vi /etc/autorestart.sh

Trích dẫn:

#!/bin/bash
service httpd restart
service mysqld restart

Sau đó cho script này chạy định kỳ vào phút thứ 5 hàng giờ bằng cách tạo một file crontab như sau:

Trích dẫn:

# crontab -e
5 * * * * sh /root/autorestart.sh

Cuối cùng, nhớ kiểm tra dịch vụ cron daemon

Trích dẫn:

# /etc/init.d/crond status

Nếu crontab chưa khởi động thì khởi động bằng lệnh

Trích dẫn:

# /etc/init.d/crond start
# chkconfig crond on

 

Chạy crontab 5 phút or 5 giờ or 5 ngày 1 lần thì dùng cấu trúc sau

5 phút */5
5 giờ 0 */5

Mã:
*/5 * * * * sh /home/ramesh/backup.sh
0 */5 * * * sh /home/ramesh/backup.sh

Tham khảo thêm ở: http://www.thegeekstuff.com/2011/07/cron-every-5-minutes/

Một số lưu ý
– Khi thực hiện khai báo lệnh này ta lên chú ý về thời gian thực hiện, tránh thực hiện những lệnh backup dữ liệu hay restart lại service trong thời gian nhạy cảm của hệ thống (thời gian có nhiều tiến trình đang hoạt động, có nhiều kết nối từ bên ngoài vào).

Tài liệu tham khảo:
Các bạn có thể tham khảo tài liệu tiếng Anh tại địa chỉ sau:
http://www.tech-geeks.org/contrib/md…ntab-howto.htm

Sưu tầm