shell脚本监控磁盘和内存使用情况设置邮件报警机制

1.监控磁盘linux命令:df

[root@hadoop02 ~]# df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda2      ext4    18G  9.5G  7.0G  58% /
tmpfs          tmpfs  491M   72K  491M   1% /dev/shm
/dev/sda1      ext4   283M   37M  232M  14% /boot

注:T:显示文件系统的类型。h:以可读性较高的方式来显示信息。

查看磁盘根目录存储信息:

[root@hadoop02 ~]# df -Th | grep '/$'
/dev/sda2      ext4    18G  9.5G  7.0G  58% /

获取根目录下的磁盘使用率:

[root@hadoop02 ~]# df -Th | grep '/$'|awk '{print $(NF-1)}'
58%

注:awk是文本编辑命令NF-n命令是打印一行数据的倒数第n列数据NF-0是打印倒数第1列数据,NF-1是打印倒数第二列数据…

[root@hadoop02 ~]# df -Th | grep '/$'|awk '{print $(NF-1)}' | awk -F "%" '{print $1}'
58

注:-F指定域分隔符为‘%’

shell监控磁盘使用率达到90%时给lhw用户发送邮件报警脚本:

#!/bin/bash
disk_use=`df -Th |grep '/$' | awk '{print $(NF-1)}'|awk -F"%" '{print $1}'`
mail_user=lhw
if [ $disk_use -ge 90 ];then
        echo "`date +%F-%H` disk: ${disk_use}%" | mail -s "disk war..." $mail_user
fi

如果想查看脚本执行过程可以采用测试方法执行:

[root@hadoop02 temp]# bash -vx disk_use.sh 
#!/bin/bash
disk_use=`df -Th |grep '/$' | awk '{print $(NF-1)}'|awk -F"%" '{print $1}'`
df -Th |grep '/$' | awk '{print $(NF-1)}'|awk -F"%" '{print $1}'
++ awk '{print $(NF-1)}'
++ awk -F% '{print $1}'
++ grep '/$'
++ df -Th
+ disk_use=58
mail_user=lhw
+ mail_user=lhw
if [ $disk_use -ge 30 ];then
	echo "`date +%F-%H` disk: ${disk_use}%" | mail -s "disk war..." $mail_user
fi
+ '[' 58 -ge 30 ']'
+ mail -s 'disk war...' lhw
date +%F-%H
++ date +%F-%H
+ echo '2020-06-06-11 disk: 58%'

这里记录一下我遇到的一个问题:

[root@hadoop01 temp]# bash -vx disk_use.sh 
#!/bin/bash
disk_use=`df -Th |grep '/$' | awk '{print $(NF-1)}'|awk -F"%" '{print $1}'`
df -Th |grep '/$' | awk '{print $(NF-1)}'|awk -F"%" '{print $1}'
++ awk -F% '{print $1}'
++ awk '{print $(NF-1)}'
++ grep '/$'
++ df -Th
+ disk_use=66
mail_user=lhw
+ mail_user=lhw
if [ $disk_use -ge 60 ];then
	echo "`date +%F-%H` disk: ${disk_use}%" | mail -s "disk war..." $mail_user
fi
+ '[' 66 -ge 60 ']'
+ mail -s 'disk war...' lhw
date +%F-%H
++ date +%F-%H
+ echo '2020-06-06-11 disk: 66%'
[root@hadoop01 temp]# send-mail: error while loading shared libraries: libmysqlclient.so.16: t open shared object file: No such file or directory

error提示我:没有找到libmysqlclient.so.16这个文件

解决办法:
#查找下libmysqlclient.so文件看是否存在

[root@hadoop01 temp]# locate libmysqlclient.so

我的情况是不存在,可能也有人有但是不是libmysqlclient.so.16而是libmysqlclient.so.18或者libmysqlclient.so.19等其他的

如果执行 locate libmysqlclient.so命令没有查找到的话直接去官网下载个
下载地址:https://downloads.mysql.com/archives/community/
在这里插入图片描述
注意:下载的版本要和你mysql安装的版本匹配

下载下上面2个解压安装:

rpm -ivh MySQL-shared-compat-5.6.29-1.linux_glibc2.5.x86_64.rpm
rpm -ivh MySQL-shared-5.6.29-1.linux_glibc2.5.x86_64.rpm

再次查看:

[lhw@hadoop02 ~]$ locate libmysqlclient.so
/usr/lib64/libmysqlclient.so
/usr/lib64/libmysqlclient.so.18
/usr/lib64/libmysqlclient.so.18.1.0

不是我要的libmysqlclient.so.16这时候执行脚本依然会报错,查找不到libmysqlclient.so.16文件

解决办法创建软连接:

ln -s /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.so.16

再次执行脚本就OK了!

内存监控脚本:

#!/bin/bash
mem_used=`free -m | grep '^Mem:' | awk '{print $3}'`
mem_total=`free -m | grep '^Mem:' | awk '{print $2}'`
mem_percent=$((mem_used*100/mem_total))

war_file=/home/01/temp/mem_war.txt
rm -rf $war_file

#echo "当前内存使用百分比:$mem_percent"

if [ $mem_percent -ge 80 ];then
        echo "`date +%F-%H` memory:${mem_percent}%" > $war_file
fi

if [ -f $war_file ];then
        mail -s "mem war..." alice < $war_file
        rm -rf $war_file
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值