#*************************************************************************
# FileName : disk_capacity_alarm.sh
#*************************************************************************
# Author : HuangBaoKang
# CreateDate : 2018-12-03
# Description : this script is mointoring the linux disk
# capacity, if disk used more than 90%,
# then it will send a alarm email
#*************************************************************************
#配合定时任务crontab,当磁盘90%的时候,给运维人员发邮件
#!/bin/bash
#============================配置部分====================================
use_ratio=50 #磁盘使用率超过此值,发送邮件
df_info="/root/hbk/df_info.txt" #保存df -h命令的文件信息
task_status_file="/root/hbk/task_status.txt" #此文件用来判断是否需要再次发邮件,解决完之后,删除此文件表示已解决
#=============================脚本部分===================================
cat /dev/null > ${df_info}; #先清空该文件内容
#获取本机ip地址,ifconfig命令一定要绝对路径,否则ip返回为空
ip=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
#获取磁盘的使用率
#或者使用df -P | grep /dev | awk '{print $5}' | cut -f 1 -d "%"
for num in `df -P | grep /dev | awk '{print $5}' | sed 's/%//g'`
do
if [ $num -gt $use_ratio ]; then
df -h >> $df_info;
# 判断是否要发送,当$task_status_file文件不存在,说明是第一次,需要发邮件提醒,否则不需要重复发邮件,解决完之后,删除此文件表示修复完成。
if [ ! -f $task_status_file ]; then
echo -e "The server $ip 存在磁盘不足\n `cat $df_info` " | mail -s "The server $ip \'s Disk Capacity Alarm" [email protected];
# 发完之后,保存到文件,达到变量的作用,防止重复发邮件
echo "unfinish" > $task_status_file;
exit 0;
fi
fi
done
编写定时任务crontab
crontab -e
由于我的是测试,所以设置的是没隔一分钟执行一次
*/1 * * * * sh /root/hbk/disk_capacity_alarm.sh
投入到线上服务器,可以修改该表达式,每一天,或者每两天等等。
在我的虚拟机上搭建的此监控脚本,发现可以发邮件。(有一个52%的)
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 27G 14G 14G 52% /
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 8.9M 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 1.6G 0 1.6G 0% /run/user/1005
tmpfs 1.6G 0 1.6G 0% /run/user/0