Danh sách bài viết trong series Bashscript từ cơ bản đến áp dụng vào DevOps
- Bài 1. Cơ Bản Bash Script trong DevOps
- Bài 2. Điều Kiện trong Bash DevOps: Xử Lý Logic Cơ Bản
- Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
- Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý Hiệu Quả
- Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả
- Bài 6. Function trong Bash DevOps: Tái Sử Dụng Code Hiệu Quả
- Bài 7. Quản Lý Biến và Môi Trường trong Bash DevOps
- Bài 8. Cron Job trong Bash DevOps: Tự Động Hóa Theo Lịch Hiệu Quả
- Bài 9. Debug trong Bash DevOps: Tìm và Sửa Lỗi Hiệu Quả
- Bài 10. Error Handling Bash DevOps: Xử Lý Ngoại Lệ Hiệu Quả
- Bài 11. Bash trong CI/CD DevOps: Tích Hợp Pipeline Hiệu Quả
- Bài 12. Quản Lý Hệ Thống với Bash DevOps: Theo Dõi và Can Thiệp Hiệu Quả
- Bài 13. Tự Động Hóa SSH với Bash DevOps: Quản Lý Multi-Server Hiệu Quả
- Bài 14. Bash và Docker trong DevOps: Quản Lý Container Hiệu Quả
- Bài 15. Monitoring với Bash DevOps: Báo Cáo Hệ Thống Hiệu Quả
- Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps Hiệu Quả
- Bài 17. Bash và API trong DevOps: Gọi và Xử Lý API Hiệu Quả
- Bài 18. Bash và Cloud CLI trong DevOps: Quản Lý Cloud Hiệu Quả
- Bài 19. Bash và Security trong DevOps: Bảo Mật Script Hiệu Quả
- Bài 20. Best Practice trong Bash DevOps: Làm Chủ Script Hiệu Quả
Cron Job trong Bash – Tự Động Hóa Theo Lịch trong DevOps
Trong DevOps, tự động hóa không chỉ là chạy script một lần mà còn là chạy chúng đúng lúc, đúng thời điểm – như backup mỗi đêm hay kiểm tra server mỗi giờ. Cron Job trong Bash DevOps là cách để bạn lập lịch Bash, biến script thành công cụ tự động hóa Bash chạy định kỳ. Trong bài thứ tám của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách dùng cron script, thiết lập cron job, và thực hành thực tế. Đây là kinh nghiệm tôi áp dụng để giữ hệ thống ổn định, không chỉ là lý thuyết đâu nhé!
Cron Job Là Gì?
Lập Lịch với Cron
Cron là công cụ trên Linux để chạy lệnh hoặc script theo lịch trình:
- Mỗi phút, giờ, ngày, tuần – bạn quyết định.
- Dùng file
crontab
để cấu hình.
Ví dụ: Chạy script kiểm tra disk lúc 2 giờ sáng mỗi ngày thay vì làm thủ công.
Tại Sao Quan Trọng trong DevOps?
- Tự động hóa định kỳ: Backup, giám sát, dọn log.
- Tiết kiệm thời gian: Không cần chạy script bằng tay.
- Ổn định hệ thống: Phát hiện vấn đề sớm (VD: disk đầy).
Thực tế: Tôi từng setup cron job kiểm tra RAM, gửi alert lúc 3 giờ sáng – cứu server khỏi crash mà không phải thức đêm.
Cách Dùng Cron Job trong Bash
Cú Pháp Crontab
File crontab
có định dạng:
* * * * * /path/to/script.sh
- 5 trường: phút (0-59), giờ (0-23), ngày (1-31), tháng (1-12), thứ (0-7, 0/7 là Chủ nhật).
- Ví dụ:
0 2 * * *
: 2 giờ sáng mỗi ngày.*/5 * * * *
: Mỗi 5 phút.
Thiết Lập Cron Job
-
Mở crontab:
crontab -e
-
Thêm job:
0 * * * * /home/user/check_system.sh
- Chạy script mỗi giờ.
-
Kiểm tra:
crontab -l
Tips: Luôn dùng đường dẫn tuyệt đối cho script.
Chuyển Hướng Output
Cron không hiển thị output, cần ghi vào file:
0 * * * * /home/user/check_system.sh >> /var/log/check.log 2>&1
>>
: Ghi thêm output.2>&1
: Chuyển cả lỗi vào file.
Thực Hành: Script Kiểm Tra Hệ Thống với Cron
Script Kiểm Tra
Tạo monitor_system.sh
(dựa trên bài trước):
#!/bin/bash
# Biến
LOG_FILE="/var/log/system_monitor.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# Hàm kiểm tra disk
check_disk() {
local DISK=$(df -h "/" | tail -1 | awk '{print $5}' | cut -d'%' -f1)
if [ "$DISK" -gt "${DISK_THRESHOLD:-80}" ]; then
echo "[$TIMESTAMP] Cảnh báo: Disk vượt $DISK% (ngưỡng ${DISK_THRESHOLD:-80}%)" >> "$LOG_FILE"
else
echo "[$TIMESTAMP] Disk ổn: $DISK%" >> "$LOG_FILE"
fi
}
# Hàm kiểm tra CPU
check_cpu() {
local CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
if [ $(echo "$CPU > ${CPU_THRESHOLD:-90}" | bc) -eq 1 ]; then
echo "[$TIMESTAMP] Cảnh báo: CPU vượt $CPU% (ngưỡng ${CPU_THRESHOLD:-90}%)" >> "$LOG_FILE"
else
echo "[$TIMESTAMP] CPU ổn: $CPU%" >> "$LOG_FILE"
fi
}
# Gọi hàm
check_disk
check_cpu
Thiết Lập Cron Job
-
Cấp quyền:
chmod +x /home/user/monitor_system.sh
-
Thêm vào crontab:
crontab -e
- Thêm dòng:
*/5 * * * * /home/user/monitor_system.sh
- Chạy mỗi 5 phút.
- Thêm dòng:
-
Kiểm tra log:
tail -f /var/log/system_monitor.log
- Kết quả mẫu:
[2025-03-13 10:00:00] Disk ổn: 42% [2025-03-13 10:00:00] CPU ổn: 15.3% [2025-03-13 10:05:00] Disk ổn: 43% [2025-03-13 10:05:00] CPU ổn: 16.1%
- Kết quả mẫu:
Giải thích:
*/5 * * * *
: Chạy mỗi 5 phút.>> "$LOG_FILE"
: Ghi log để theo dõi.
DevOps: Script này giám sát hệ thống định kỳ, có thể mở rộng để gửi alert.
Debug Cron Job
- Kiểm tra cron chạy:
grep CRON /var/log/syslog # Ubuntu
- Test script thủ công:
/home/user/monitor_system.sh
Thực tế: Tôi từng quên quyền thực thi, cron thất bại – kiểm tra syslog giúp tìm ra ngay.
Ứng Dụng trong DevOps
Tự Động Hóa Định Kỳ
- Backup hàng ngày:
0 1 * * * tar -czf /backup/data-$(date +\%Y\%m\%d).tar.gz /data
Pipeline CI/CD
- Kiểm tra trước job nặng:
pre_check: script: - /home/user/monitor_system.sh - grep "Cảnh báo" /var/log/system_monitor.log && exit 1
Case study: Một team dùng cron job dọn log cũ mỗi tuần, tiết kiệm 50GB disk – không cần can thiệp tay.
Best Practice
- Dùng đường dẫn tuyệt đối.
- Chuyển hướng output để debug.
- Test script trước khi thêm vào cron.
Kết Luận
Cron Job trong Bash DevOps là cách mạnh mẽ để tự động hóa Bash theo lịch trình với lập lịch Bash. Thực hành với monitor_system.sh
cho thấy bạn có thể giám sát hệ thống định kỳ dễ dàng – bước quan trọng trong DevOps. Bài tiếp theo, chúng ta sẽ khám phá Debug Cơ Bản trong Bash – cách tìm và sửa lỗi như pro.