我是 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]
将该行发送到电子邮件正文[电子邮件保护]标题为“太空警报”