Bài 8. Cron Job trong Bash DevOps: Tự Động Hóa Theo Lịch 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

  1. Mở crontab:

    crontab -e
  2. Thêm job:

    0 * * * * /home/user/check_system.sh
    • Chạy script mỗi giờ.
  3. 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

  1. Cấp quyền:

    chmod +x /home/user/monitor_system.sh
  2. Thêm vào crontab:

    crontab -e
    • Thêm dòng:
      */5 * * * * /home/user/monitor_system.sh
    • Chạy mỗi 5 phút.
  3. 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%

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.

Điều hướng chuỗi bài viết<< Bài 7. Quản Lý Biến và Môi Trường trong Bash DevOps
>> Bài 9. Debug trong Bash DevOps: Tìm và Sửa Lỗi Hiệu Quả
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận