加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

shell编程中为何监控磁盘分区的使用,如何设置

发布时间:2023-04-18 14:53:41 所属栏目:Linux 来源:
导读:这篇文章给大家分享的是“shell编程中为何监控磁盘分区的使用,如何操作”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。

不知道大家有没有碰
这篇文章给大家分享的是“shell编程中为何监控磁盘分区的使用,如何操作”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。
 
不知道大家有没有碰到过磁盘分区写满,导致新数据写入不了,造成网站出现了问题。之前自己有几次碰到过这种情况,自己当时紧急解决办法是:删除网站的日志文件,删除了MySQL的binlog日志。
 
当然我们是不希望发生此类问题的,如果网站总出现不稳定或打不开情况,会给用户一种不靠谱的感觉。所以,对于磁盘分区的使用,我们需要实时监控,当超过预设值时,就发送份邮件或短信给管理员,将错误扼杀至摇篮里。
 
对于此脚本的编写是很简单的,主要一点就是获取到磁盘分区的使用率。我们知道df命令可以列出各个分区的空间使用情况:
 
# df
 
Filesystem     1K-blocks     Used Available Use% Mounted on
 
devtmpfs         3986648        0   3986648   0% /dev
 
tmpfs            3999984        0   3999984   0% /dev/shm
 
tmpfs            3999984      528   3999456   1% /run
 
tmpfs            3999984        0   3999984   0% /sys/fs/cgroup
 
/dev/vda1       41931756 17576208  24355548  42% /
 
/dev/vdb1       52403200   476572  51926628   1% /data
 
/dev/vdb2      104806400 29255772  75550628  28% /www
 
tmpfs             799996        0    799996   0% /run/user/0
 
/dev/vdb3       52402180   398576  52003604   1% /mnt
 
我们可以看到各个分区的空间使用情况。然后接口grep命令以及awk命令,过滤掉其他信息,只留下各个分区的使用情况信息。
 
我们只想得到以/dev/开头的分区信息
 
# df | grep ^/dev
 
/dev/vda1       41931756 17576264  24355492  42% /
 
/dev/vdb1       52403200   476572  51926628   1% /data
 
/dev/vdb2      104806400 29255980  75550420  28% /www
 
/dev/vdb3       52402180   398576  52003604   1% /mnt
 
然后继续使用awk命令过滤不想要的信息
 
# df | grep ^/dev | awk '{print $1":"$5}'
 
/dev/vda1:42%
 
/dev/vdb1:1%
 
/dev/vdb2:28%
 
/dev/vdb3:1%
 
拿到各个分区的使用率后,下面就是对其进行循环遍历,依次判断各个分区的使用情况。
 
下面给出完成的代码:
 
#!/bin/bash
 
# 监控分区的空间使用情况,超过预设值告警
 
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin
 
export LANG=en
 
# 分区空间使用率阀值
 
USE_LIM=70
 
while ((1))
 
do
 
    disks=$( df | grep ^/dev | awk '{print $1":"$5}')
 
    for disk in $disks
 
    do
 
        used=$(echo $disk | cut -d: -f2 | cut -d'%' -f1)

        if [ "$used" -ge "$USE_LIM" ];then
 
            # 调用告警脚本,这里直接用echo来替代了
 
            echo "$(echo $disk | cut -d: -f1) is used $used%"
 
        fi
 
    done

    sleep 10
 
done
 
注意:一般我们服务器上用的语系都是英文的,特别是在编写shell脚本的时候,建议加上这样一行
 
export LANG=en
 
因为我们是要做实时的监控,所以脚本里使用了死循环,表示此脚本不会停会一直循环执行。当然,执行速度也是要做限制的,不然占用太多服务器资源就不太好了。所以这里使用了sleep 10,表示10秒监控一次。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!