Script theo dõi dung lượng ổ đĩa cứng Linux và gửi email thông báo

Bạn đang quản lý và vận hành máy chủ Linux, một ngày bạn nhận được thông báo một dịch vụ nào đó không hoạt động. Sau khi đăng nhập để kiểm tra máy chủ, bạn nhận ra các dịch vụ đang hoạt động. Vậy đâu là nguyên nhân?

Kiểm tra log bạn phát hiện ra - một lỗi ngớ ngẩn, đến từ sự tắc trách, thiếu trách nhiệm của bạn - hết dung lượng ổ cứng. Thật tai hại! và bạn sẽ tự vấn bản thân bằng đôi câu. Và giờ, bạn đang đọc bài viết này của tôi để tự viết cho mình một script ngăn ngừa hậu họa này.

Tôi đang dùng Bash Script và thêm Bash Script này vào crontab, và gửi email đến monitor@ khi ổ cứng đạt tới ngưỡng cảnh báo.

#!/bin/bash
# Author:       Tien
# Version:      1.0 check disk free space. And then it sends the email when it reachs the thresold.

CURRENT=$(df /home | grep / | awk '{ print $5}' | sed 's/%//g')  
THRESHOLD=90

if [ "$CURRENT" -gt "$THRESHOLD" ]; then  
        echo "Your home partition remaining free space is critically low. Used: $CURRENT%" | mail -r noreply@tien-phan.com -s "Disk Space Alert" monitor@tien-phan.com
fi

Phần giải thích chi tiết

Bạn kiểm tra dung lượng ổ đĩa cứng bằng cách dùng lệnh df

df /home  
Filesystem               1K-blocks      Used Available Use% Mounted on  
/dev/mapper/centos-home 1023991280 484202400 539788880  48% /home

Kết quả trả về là thông tin đủ, nhưng dư thừa. Tôi sẽ đi từng bước tiếp theo để lấy chỉ duy nhất THRESHOLD (ngưỡng). Tới đây, tôi thêm grep /, mục đích là chỉ lấy dòng có dấu /

df /home/ | grep /  
/dev/mapper/centos-home 1023991280 484202400 539788880  48% /home

Tôi dùng awk '{ print $5}' để hiển thị duy nhất kết quả ở cột thứ 5 từ trái sang phải.

df /home/ | grep / | awk '{ print $5}'  
48%  

Tốt rồi, tôi đã có 48% ở trên. Nhưng trong Script, tôi để biến THRESHOLD là 90, nó là một số tự nhiên không có %, do đó tôi cần bỏ % để Script thực thi đúng đắn. Tôi dùng sed 's/%//g' như dưới đây.

df /home/ | grep / | awk '{ print $5}' | sed 's/%//g'  
48  

Tiếp theo, tôi dùng cú pháp If then như bạn đã thấy. Nếu dung lượng ổ đĩa hiện tại lớn hơn THRESHOLD (ngưỡng) cảnh báo tôi đã thiết lập, máy chủ sẽ gửi một email đến tôi. Máy chủ gửi bằng cách nào?

Tôi viết đoạn sau:

echo "Your home partition remaining free space is critically low. Used: $CURRENT%" | mail -r noreply@tien-phan.com -s "Disk Space Alert" monitor@tien-phan.com  

Trong đó,

  • echo để in ra dòng thông báo
  • mail là mail client trên hệ điều hành Linux, bạn có thể lựa chọn khác như mailx ...
  • -r định nghĩa người gửi, bạn nên lấy tên định danh để người nhận biết đây là email thông báo, và không cần phản hồi.
  • -s là tiêu đề email.
  • monitor@tien-phan.com là email người nhận. Hãy thay bằng email của bạn, tôi sẽ nhận vui xen lẫn hoang mang khi một ngày đẹp trời nhận email từ máy chủ nào đó, mà tôi không biết nó là ai???!!!

Đến đây, tôi đã kết thúc bài viết. Hi vọng bài viết này sẽ hữu ích với bạn.

Kết luận

Trong bài viết này, tôi đã hướng dẫn bạn viết Script để kiểm tra dung lượng ổ đĩa cứng còn trống trên máy chủ Linux. Tôi có niềm tin bài viết giúp ích cho bạn.

Lời cám ơn

Tôi cám ơn bạn đã dành thời gian để đọc bài viết này. Tất nhiên, tôi luôn quan tâm đến hoàn thiện chất lượng bài viết, vì vậy mọi sự đóng góp của bạn là sự khích lệ đối với tôi.

Bài viết thể hiện quan điểm, văn phong của tác giả. Mọi sự tranh luận, phản biện được khuyến khích. Và tôi bảo lưu mọi quan điểm cho đến khi mọi thứ được sáng tỏ trên cơ sở sự chính xác của thông tin.

Tài liệu tham khảo

Tien Phan

Read more posts by this author.

Subscribe to

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!