CodeGym /Các khóa học /Docker SELF /Viết một bash-script đơn giản để tự động hóa các nhiệm vụ...

Viết một bash-script đơn giản để tự động hóa các nhiệm vụ bằng cách sử dụng cron

Docker SELF
Mức độ , Bài học
Có sẵn

Viết một bash-script đơn giản để tự động hóa các nhiệm vụ bằng cách sử dụng cron

1. Xác định nhiệm vụ

Hôm nay, chúng ta sẽ viết một script thực tế, kiểm tra tính khả dụng của website và ghi kết quả vào một file log, sau đó tự động hóa việc chạy nó bằng cron.

Chúng ta muốn làm gì?

Chúng ta sẽ tạo một bash script mà:

  1. Kiểm tra tính khả dụng của website chỉ định bằng ping.
  2. Ghi kết quả kiểm tra vào file nhật ký, bao gồm thời gian và ngày tháng.
  3. Chạy script này tự động mỗi 5 phút với cron.

Tại sao điều này quan trọng?

Trong thế giới thực, việc giám sát tính khả dụng của website và server là một trong những nhiệm vụ quan trọng nhất của quản trị hệ thống. Ví dụ, nếu website (hoặc server) của bạn đột nhiên không phản hồi, bạn muốn biết về việc này càng sớm càng tốt. Kịch bản này hữu ích không chỉ để giám sát mà còn trong phỏng vấn hoặc thực hành công việc.


2. Bước 1: Viết bash-script đơn giản

Bắt đầu bằng việc viết bash-script cơ bản. Đây là giải thích từng bước về những gì script này sẽ làm:

  1. Chúng ta sẽ chỉ định địa chỉ website cần kiểm tra.
  2. Sử dụng ping để thử gửi request đến server.
  3. Kiểm tra xem có nhận được phản hồi hay không.
  4. Lưu kết quả vào file log.

Hãy tạo file site_check.sh:

#!/bin/bash

# Xác định địa chỉ website
WEBSITE="example.com"

# File để ghi log kết quả
LOG_FILE="/var/log/site_status.log"

# Kiểm tra trạng thái website bằng cách sử dụng ping
if ping -c 1 $WEBSITE &> /dev/null; then
    # Nếu website khả dụng
    echo "$(date): $WEBSITE có thể truy cập" >> $LOG_FILE
else
    # Nếu website không khả dụng
    echo "$(date): $WEBSITE không thể truy cập" >> $LOG_FILE
fi

Giải thích mã:

  1. #!/bin/bash — chỉ định rằng script này sẽ được thực thi bằng Bash.
  2. WEBSITE="example.com" — địa chỉ website cần kiểm tra. Bạn có thể thay example.com bằng bất kỳ website hoặc server nào mà bạn muốn theo dõi.
  3. ping -c 1 $WEBSITE — gửi một gói tin (-c 1) đến website chỉ định. Nếu website phản hồi, command sẽ hoàn thành với mã 0. Nếu không thì sẽ báo lỗi.
  4. &> /dev/null — chuyển hướng output tiêu chuẩn và lỗi vào "hố đen" (chúng ta không muốn thấy output của ping trong terminal).
  5. $(date) — thêm ngày và giờ hiện tại vào thông báo.
  6. >> $LOG_FILE — ghi thêm kết quả vào cuối file log.

3. Bước 2: Chạy script thủ công

Trước khi tự động hóa việc chạy script, hãy đảm bảo rằng nó hoạt động.

  1. Lưu script vào file site_check.sh.

  2. Đặt quyền thực thi cho nó:

    chmod +x site_check.sh
    
  3. Chạy script:

    sudo ./site_check.sh
    

Sau khi thực thi script, mở file /var/log/site_status.log để đảm bảo rằng kết quả kiểm tra đã được thêm vào log. Sử dụng lệnh:

cat /var/log/site_status.log

Nếu mọi thứ hoạt động, bạn sẽ thấy dòng như sau:

Mon Oct 30 14:35:22 UTC 2023: example.com is reachable

4. Bước 3: Cài đặt thực thi tự động bằng cron

Chúng ta đã biết rằng cron cho phép chạy các nhiệm vụ theo lịch trình. Giờ chúng ta sẽ cài đặt cron để script của chúng ta chạy mỗi 5 phút.

Chỉnh sửa crontab

Mở trình chỉnh sửa crontab:

crontab -e

Thêm dòng sau:

*/5 * * * * /path/to/site_check.sh

Giải thích:

  • */5 — chỉ ra rằng nhiệm vụ phải chạy mỗi 5 phút.
  • /path/to/site_check.sh — đường dẫn đầy đủ đến script của chúng ta. Đảm bảo rằng nó đúng. Ví dụ, nếu script nằm trong thư mục chính của user, đường dẫn sẽ là gì đó như /home/your_username/site_check.sh.

Sau khi lưu lại thay đổi, cron sẽ bắt đầu chạy script mỗi 5 phút. Để kiểm tra xem nhiệm vụ đã được thêm vào chưa, thực hiện lệnh:

crontab -l

5. Bước 4: Kiểm tra hoạt động của cron

Bây giờ kiểm tra xem tự động hóa có hoạt động không nhé. Chờ 5-10 phút và mở lại file log:

cat /var/log/site_status.log

Bạn nên thấy các bản ghi mới được cập nhật mỗi 5 phút. Ví dụ:

Mon Oct 30 14:35:22 UTC 2023: example.com có thể truy cập được
Mon Oct 30 14:40:22 UTC 2023: example.com có thể truy cập được
Mon Oct 30 14:45:22 UTC 2023: example.com có thể truy cập được

6. Phân tích các câu hỏi và lỗi phổ biến

  1. Ping trả về lỗi 'Permission denied'

    Nếu bạn chạy script dưới quyền người dùng thông thường, có thể quyền của bạn không đủ. Chạy script với sudo hoặc cấp quyền thực thi.

  2. File log không được tạo

    Hãy đảm bảo rằng đường dẫn đến file log (/var/log/site_status.log) được chỉ định đúng và người dùng của bạn có quyền ghi vào thư mục này. Nếu file không tồn tại, hãy tạo nó bằng cách sử dụng:

    sudo touch /var/log/site_status.log
    sudo chmod 666 /var/log/site_status.log
    
  3. cron không chạy script

    Kiểm tra xem dịch vụ cron có đang hoạt động không:

    sudo systemctl status cron
    

    Nó phải ở trạng thái active (running). Nếu nó bị dừng, hãy khởi động lại:

    sudo systemctl start cron
    
  4. Script không chạy với cron nhưng chạy thủ công thì được

    Hãy đảm bảo rằng đường dẫn đến script và tất cả các file sử dụng được ghi đầy đủ. Trong các task của cron, các biến môi trường (ví dụ, $PATH) có thể khác. Tốt nhất là sử dụng đường dẫn tuyệt đối.


7. Cải tiến và nhiệm vụ bổ sung

Lọc các website

Mở rộng script để kiểm tra trạng thái của nhiều website. Ví dụ:

WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$(date): $SITE is reachable" >> $LOG_FILE
    else
        echo "$(date): $SITE is unreachable" >> $LOG_FILE
    fi
done

Gửi thông báo

Bổ sung thêm tính năng gửi thông báo nếu website không khả dụng. Ví dụ, sử dụng lệnh mail để gửi email:

# Thông báo qua email
if ! ping -c 1 $WEBSITE &> /dev/null; then
    echo "$WEBSITE is down!" | mail -s "Website Check Alert" your_email@example.com
fi

Ghi nhật ký theo chu kỳ

Giới hạn kích thước file log tới, ví dụ, 1 MB. Nếu file quá lớn, đổi tên (như lưu trữ) và bắt đầu một file log mới.


Chúc mừng! Bây giờ bạn đã biết cách sử dụng script bash và cron để tự động hóa các nhiệm vụ thực tế. Kỹ năng này đặc biệt hữu ích đối với các DevOps-engineer và quản trị hệ thống.

1
Опрос
Dịch vụ Linux,  3 уровень,  6 лекция
недоступен
Dịch vụ Linux
Dịch vụ Linux
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION