Cấu hình crontab LINUX CentOS 7

bởi | CentOS 7, LPI

Home » LPI » Cấu hình crontab LINUX CentOS 7

Định nghĩa

Sử dụng crontab hoặc at để thực thi câu lệnh, scripts vào 1 thời điểm nào đó
+ cd /etc/cron ấn tab
[root@thanhdd ~]# cd /etc/cron
cron.d/ cron.deny cron.monthly/ cron.weekly/
cron.daily/ cron.hourly/ crontab

cron.deny – Định nghĩa các user không được thực thi cron
cron.monthly/ – Run jobs monthly
cron.weekly/ – Run jobs weekly
cron.daily/ – Run jobs daily
cron.hourly/ – Run jobs hourly
crontab – file cấu hình các jobs crontab

crontab fomat

vi /etc/crontab

* * * * * user-name command to be executed
phút

(0 – 59)

giờ

(0 – 23)

ngày của tháng

(1 – 31)

tháng

(1 – 12) OR jan,feb,mar,apr …

ngày trong tuần

(0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,t

lệnh hoặc script được chạy

Ví dụ crontab

30 08 10 06 * /home/test3/full-backup
>>> Thực thi full-backup vào lúc 8h30 ngày 10 tháng 6

00 11,16 * * * /home/test3/bin/incremental-backup
>>> Thực thi incremental-backup vào lúc 11h và 16h mỗi ngày

00 09-18 * * * /home/test3/bin/check-db-status
>>> Thực thi check-db-status vào 9h đến 18h hàng ngày

00 09-18 * * 1-5 /home/test3/bin/check-db-status
>>> Thực thi check-db-status vào 9h đến 18h từ thứ 2 đến thứ 6

* * * * * CMD
>>> Thực thi câu lệnh mỗi phút

*/10 * * * * /home/test3/check-disk-space
>>> Thực thi check-disk-space mỗi 10 phút 1 lần

@yearly /home/test3/red-hat/bin/annual-maintenance
>>> Thực thi vào phút đầu tiên của năm

@monthly /home/test3/suse/bin/tape-backup
>>> Thực thi vào phút đầu tiên của tháng

@daily /home/test3/arch-linux/bin/cleanup-logs "day started"
>>> Thực thi vào phút đầu tiên của ngày

@reboot CMD
>>> Thực thi câu lệnh ngay sau khi reboot

log crontab

Để xác minh xem crontab có được thực thi thành công hay không, hãy kiểm tra tệp /var/log/cron, tệp này chứa thông tin về tất cả các công việc cron được thực thi trong hệ thống.
tail /var/log/cron
cat /var/log/cron

crontab có thể thực thi ở 2 mức độ

+ Peruser: Mỗi user có thể định nghĩa 1 tiến trình crontab riêng. * Sau khi ta thiết lập thì file crontab cho user sẽ được tạo ra trong folder “/var/spool/cron” của user đó

+ System-Wide: định nghĩa crontab ở mức độ hệ thống. * Ta ghi thêm các dòng cấu hình ở trong file /etc/crontab

Tạo crontab cho user bình thường

+ Kiểm tra vị trí đặt file cấu hình crontab cho user
[test3@thanhdd ~]$ cd /var/spool/cron
ls -l

+ Cấu hình crontab cho user test3
$ crontab -e
# crontab -u test3 -e

+ Hiển thị bảng crontab của 1 user
$ crontab -l
# crontab -u test3 -l

+ xóa tất cả crontab của 1 user
$ crontab -r
# crontab -u test3 -r

Tạo crontab ở mức độ cho từng user

+ cho user thử câu lệnh
uptime | awk '{print $5,$6,$7,$8,$9}'

+ tạo ra 1 file scripts
vi load.sh
# ghi vào file
#!bin/bash #khai báo ngôn ngữ là bashshell
Filename=/home/test3/load.txt
uptime | awk '{print $5,$6,$7,$8,$9}' >> $Filename
# Do đây là 1 cripts nên cần cho quyền thực thi
chmod +x load.sh
# Chạy file load.sh
sh ./load.sh
# Nếu chạy đúng trong home folder của user sẽ sinh ra file load.txt
ls -l
cat load.txt #sẽ thấy thông tin show ra sau khi scripts được chạy

+ Tạo crontab cho user
# tạo cron mỗi phút sẽ kích hoạt scripts
crontab -e
* * * * * sh /home/test3/load.sh #ghi vào trong file
# kiểm tra
watch cat load.txt #sẽ thấy cứ 1 phút sẽ thêm 1 dòng
# su về user root kiểm tra folder
ls -l /var/spool/cron # sẽ thấy file tets3
cat /var/spool/cron/test3 # sẽ thấy dòng crontab đã tạo

cấu hình crontab cho toàn hệ thống

+ tạo scripts “ping.sh”
cd

+ vi ping.sh
# ghi vào file
#!bin/bash #khai báo ngôn ngữ là bashshell
Filename=/root/ping.txt
date >> $Filename && ping -c 1 localhost >> $Filename
echo "***END-PING***" >> $Filename

+ Gắn thêm quyền thực thi cho scripts
chmod +x ping.sh

+ chạy thử
ls # Sẽ thấy file ping.sh
sh ./ping.sh # Chạy cripts
ls # Sẽ thấy có thêm file ping.txt

+ Cấu hình cronb ở mức độ system-wide, bằng cách ghi thêm vào file /etc/crontab
vi /etc/crontab
* * * * * root sh /root/ping.sh

+ kiểm tra
watch cat ping.txt # mỗi phút sẽ có thêm dòng kết quả ping trong file

+ Ví dụ tạo scripts để RSYNS
vi rsync.sh
#!bin/bash
rsync -auv –delete -e ssh /home/ root@192.168.225.1:/backup

vi /etc/crontab
* * * * * root sh /root/rsync.sh