用 Linux Shell 指令碼來監控磁碟使用情況併傳送郵件
市場上有很多用來監控 Linux 系統的監控工具,當系統到達閥值後它將傳送一封郵件。它監控所有的東西例如 CPU 利用率、記憶體利用率、交換空間利用率、磁碟空間利用率等等。然而,它更適合小環境和大環境。
想一想如果你只有少量系統,那麼什麼是最好的方式來應對這種情況。
是的,我們想要寫一個 shell 指令碼 來實現。
在這篇指南中我們打算寫一個 shell 指令碼來監控系統的磁碟空間使用率。當系統到達給定的閥值,它將給對應的郵件地址傳送一封郵件。在這篇文章中我們總共新增了四個 shell 指令碼,每個用於不同的目的。之後,我們會想出其他 shell 指令碼來監控 CPU,記憶體和交換空間利用率。
在此之前,我想澄清一件事,根據我觀察的磁碟空間使用率 shell 指令碼使用情況。
大多數使用者在多篇部落格中評論說,當他們執行磁碟空間使用率指令碼時他們獲得了以下錯誤。
# sh /opt/script/disk-usage-alert-old.sh
/dev/mapper/vg_2g-lv_root
test-script.sh: line 7: [: /dev/mapper/vg_2g-lv_root: integer expression expected
/ 9.8G
是的,這是對的。甚至,當我第一次執行這個指令碼的時候我遇到了相同的問題。之後,我發現了根本原因。
當你在基於 RHEL 5 & RHEL 6 的系統上執行包含用於磁碟空間警告的 df -h
或 df -H
的 shell 指令碼中時,你會發現上述錯誤資訊,因為輸出格式不對,檢視下列輸出。
為了解決這個問題,我們需要用 df -Ph
(POSIX 輸出格式),但是預設的 df -h
在基於 RHEL 7 的系統上執行的很好。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_2g-lv_root
10G 6.7G 3.4G 67% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/sda1 976M 95M 830M 11% /boot
/dev/mapper/vg_2g-lv_home
5.0G 4.3G 784M 85% /home
/dev/mapper/vg_2g-lv_tmp
4.8G 14M 4.6G 1% /tmp
方法一:Linux Shell 指令碼來監控磁碟空間使用率和傳送郵件
你可以使用下列 shell 指令碼在 Linux 系統中來監控磁碟空間使用率。
當系統到達給定的閥值限制時,它將傳送一封郵件。在這個例子中,我們設定閥值為 60% 用於測試目的,你可以改變這個限制來符合你的需求。
如果超過一個檔案系統到達給定的閥值,它將傳送多封郵件,因為這個指令碼使用了迴圈。
同樣,替換你的郵件地址來獲取這份警告。
# vi /opt/script/disk-usage-alert.sh
#!/bin/sh
df -Ph | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output;
do
echo $output
used=$(echo $output | awk '{print $1}' | sed s/%//g)
partition=$(echo $output | awk '{print $2}')
if [ $used -ge 60 ]; then
echo "The partition \"$partition\" on $(hostname) has used $used% at $(date)" | mail -s "Disk Space Alert: $used% Used On $(hostname)" [email protected]
fi
done
輸出:我獲得了下列兩封郵件警告。
The partition "/dev/mapper/vg_2g-lv_home" on 2g.CentOS7 has used 85% at Mon Apr 29 06:16:14 IST 2019
The partition "/dev/mapper/vg_2g-lv_root" on 2g.CentOS7 has used 67% at Mon Apr 29 06:16:14 IST 2019
最終新增了一個 cronjob 來自動完成。它會每 10 分鐘執行一次。
# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert.sh
方法二:Linux Shell 指令碼來監控磁碟空間使用率和傳送郵件
作為代替,你可以使用下列的 shell 指令碼。對比上面的指令碼我們做了少量改變。
# vi /opt/script/disk-usage-alert-1.sh
#!/bin/sh
df -Ph | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output;
do
max=60%
echo $output
used=$(echo $output | awk '{print $1}')
partition=$(echo $output | awk '{print $2}')
if [ ${used%?} -ge ${max%?} ]; then
echo "The partition \"$partition\" on $(hostname) has used $used at $(date)" | mail -s "Disk Space Alert: $used Used On $(hostname)" [email protected]
fi
done
輸出:我獲得了下列兩封郵件警告。
The partition "/dev/mapper/vg_2g-lv_home" on 2g.CentOS7 has used 85% at Mon Apr 29 06:16:14 IST 2019
The partition "/dev/mapper/vg_2g-lv_root" on 2g.CentOS7 has used 67% at Mon Apr 29 06:16:14 IST 2019
最終新增了一個 cronjob 來自動完成。它會每 10 分鐘執行一次。
# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert-1.sh
方法三:Linux Shell 指令碼來監控磁碟空間使用率和傳送郵件
我更喜歡這種方法。因為,它工作起來很有魔力,你只會收到一封關於所有事的郵件。
這相當簡單和直接。
*/10 * * * * df -Ph | sed s/%//g | awk '{ if($5 > 60) print $0;}' | mail -s "Disk Space Alert On $(hostname)" [email protected]
輸出: 我獲得了一封關於所有警告的郵件。
Filesystem Size Used Avail Use Mounted on
/dev/mapper/vg_2g-lv_root 10G 6.7G 3.4G 67 /
/dev/mapper/vg_2g-lv_home 5.0G 4.3G 784M 85 /home
方法四:Linux Shell 指令碼來監控某個分割槽的磁碟空間使用情況和傳送郵件
# vi /opt/script/disk-usage-alert-2.sh
#!/bin/bash
used=$(df -Ph | grep '/dev/mapper/vg_2g-lv_dbs' | awk {'print $5'})
max=80%
if [ ${used%?} -ge ${max%?} ]; then
echo "The Mount Point "/DB" on $(hostname) has used $used at $(date)" | mail -s "Disk space alert on $(hostname): $used used" [email protected]
fi
輸出: 我得到了下面的郵件警告。
The partition /dev/mapper/vg_2g-lv_dbs on 2g.CentOS6 has used 82% at Mon Apr 29 06:16:14 IST 2019
最終新增了一個 cronjob 來自動完成這些工作。它將每 10 分鐘執行一次。
# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert-2.sh
注意: 你將在 10 分鐘後收到一封郵件警告,因為這個指令碼被計劃為每 10 分鐘執行一次(但也不是精確的 10 分鐘,取決於時間)。
例如這個例子。如果你的系統在 8:25 到達了限制,你將在 5 分鐘後收到郵件警告。希望現在講清楚了。
via: https://www.2daygeek.com/linux-shell-script-to-monitor-disk-space-usage-and-send-email/
作者:Magesh Maruthamuthu 選題:lujun9972 譯者:warmfrog 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
相關文章
- 用於自動監控磁碟使用情況的 Shell 指令碼指令碼
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體
- Python監控程序資源佔用併傳送郵件Python
- 【shell】磁碟監控指令碼指令碼
- 用 Bash 指令碼監控 Linux 上的記憶體使用情況指令碼Linux記憶體
- 監控磁碟使用率的shell指令碼指令碼
- 如何用bash shell 指令碼監控 Linux記憶體、磁碟和 CPU?指令碼Linux記憶體
- Linux中監控磁碟分割槽及使用情況的命令有哪些?Linux
- Linux中監控磁碟分割槽和使用情況的幾個工具Linux
- 監視磁碟使用情況
- 【Grafana】告警配置併傳送郵件Grafana
- 利用 Shell 指令碼來監控 Linux 系統的記憶體指令碼Linux記憶體
- 阿里雲Linux啟用465埠傳送郵件阿里Linux
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- 案例二十每分鐘監控錯誤日誌併傳送郵件給相關人員
- 傳送郵件
- 郵件傳送
- 谷歌郵箱,配置傳送郵件密碼谷歌密碼
- 用oracle傳送電子郵件Oracle
- Linux基礎命令---sendmail傳送郵件LinuxAI
- Linux Centos7傳送QQ郵件LinuxCentOS
- laravel 傳送郵件修改密碼Laravel密碼
- SpringBoot傳送郵件Spring Boot
- phpcms傳送郵件PHP
- 郵件的傳送
- Laravel傳送郵件Laravel
- Laravel 傳送郵件Laravel
- thinkjs 傳送郵件JS
- PHP傳送郵件PHP
- nodejs 傳送郵件NodeJS
- java郵件傳送Java
- python傳送郵件Python
- Django——郵件傳送Django
- gmail傳送郵件AI
- SpringBoot郵件傳送Spring Boot
- JAVA 資料寫入excel併傳送郵件JavaExcel
- 利用Bash指令碼監控Linux伺服器的記憶體使用情況的相關資料指令碼Linux伺服器記憶體
- shell指令碼:批次傳送curl請求指令碼