如果磁盘使用率超过 90%,则发送警报邮件,如果磁盘使用率达到 95%,则发送另一封警报

如果磁盘使用率超过 90%,则发送警报邮件,如果磁盘使用率达到 95%,则发送另一封警报

我是 shell 脚本的新手,想在我的服务器上实现一个脚本,当磁盘使用率超过 90% 时,该脚本将自动发送电子邮件警报,当磁盘使用率超过 95% 时,将发送第二封电子邮件警报。我的文件系统是 abc:/xyz/abc,挂载是 /pqr。

请帮助我编写脚本。

答案1

这是实现这一目标的众多方法之一。这个是快速而肮脏

#!/bin/bash

errortext=""
EMAILS="[email protected],[email protected]"

# get file system disk usage report for 
# all file systems (-a) 
# with POSIX output (P) 
# in human readable format (h)
# Look for only vgroup (I've LVM), but if you want only /home and /var 
# to be checked for, do something like this: egrep 'home|var'

for line in `df -aPh | egrep 'vgroup-' | sort | awk '{print$6"-"$5"-"$4}'`
do

    # get the percent and chop off the %
    percent=`echo "$line" | awk -F - '{print$2}' | cut -d % -f 1`
    partition=`echo "$line" | awk -F - '{print$1}' | cut -d % -f 1`

    # Let's set the limit to 90% when alert should be sent
    limit=90

    if [ $percent -ge $limit ]; then
        errortext="$errortext $line"
    fi
done

# send an email
if [ -n "$errortext" ]; then
    echo "$errortext" | mail -s "NOTIFICATION: some partitions on almost full"         $EMAILS
fi

答案2

这是一个周一到周五早上 8 点运行的 cron,当使用率超过 90% 时会发出警报

0 8 * * 1-5 df | tail --lines=+2 | sed s/%//g | awk '{ if($5 > 90) print $0;}'|mail -s "space alert" [email protected]
  • 0 8 * * 1-5告诉 crontab 周一至周五早上 8 点运行此任务(1-5)
  • df | tail --lines=+2跳过前两行并获取所有输出
  • sed s/%//g'去掉百分号
  • awk ...如果输出中的第 5 个字段是大于 90 的数字,则打印该行
  • |mail -s "space alert" [email protected]将该行发送到电子邮件正文[电子邮件保护]标题为“太空警报”

相关内容