Linux系统运维脚本:编写bash脚本程序监控服务器的磁盘空间,在磁盘使用率超过阈值时发送警告邮件

服务器 0

目              录

一、要求

二、解决方案

(一)解决思路

(二)方案

三、脚本程序实现

(一)脚本代码和解释

1、脚本代码

2、代码解释

(二)脚本验证

1、脚本编辑

2、给予执行权限

3、运行脚本,查看效果

四、扩展


一、要求

        linux系统正常运行的过程中,一些应用程序会不断的产生日志和缓存等文件,这些数据一直会累加,占用硬盘空间。随着时间的推移,可能会占用大部分的磁盘空间,甚至占满。这样,可能导致业务程序运行出现异常、甚至导致有的业务程序停止运行。那么如何预防这种情况呢?

二、解决方案

(一)解决思路

        检测硬盘空间,可以采用df命令;然后通过shell命令,找到磁盘的空间占用率。发现空间快要满的时候,可以通过mail发出告警消息。通过这些命令,编一个bash的脚本文件,就可以实现需求。

(二)方案

       (1)通过ifconfig得到本机IP地址,或者hostname获取本机名称。

       (2)通过df、grep、awk等命令,获得硬盘的占有率

       (3)判断硬盘空间占用是否达到警戒线,比如80%

       (4)若超过80%,通过mail命令,发送email给维护人员。

三、脚本程序实现

        直接把脚本写出来,分享给大家。

(一)脚本代码和解释

1、脚本代码

        如下为编写的bash代码:

#!/bin/bash#monitor available disk space#提取本服务器的IP地址信息IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`SPACE=$(df -hP | grep '/$' | awk '{print int($5)}')if [ $SPACE -ge 80 ]thenecho "$IP 服务器磁盘空间使率已经超过80%,请及时处理。"|mail -s "$IP 服务器硬盘告警" 124957736@qq.comfiecho "SPACE value: $SPACE"

2、代码解释

        脚本的主要目的是监控服务器的磁盘空间使用情况,并在磁盘空间使用率超过80%时发送警告邮件。以下是脚本的详细解释:

(1)#!/bin/bash

        这用于指示系统使用哪个解释器来执行此脚本。在这里,它告诉系统使用/bin/bash来执行此脚本。

(2)IP=ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`

       这行命令用于获取eth0网络接口的IP地址。

       ifconfig eth0:显示eth0网络接口的配置信息。

       grep "inet addr":从ifconfig的输出中筛选出包含“inet addr”的行。

       cut -f 2 -d ":":以冒号:为分隔符,提取第二个字段,这通常是IP地址前的部分,如inet addr:192.168.1.100中的192.168.1.100。

       cut -f 1 -d " ":以空格为分隔符,提取第一个字段,即IP地址本身。

       最终,IP变量将包含eth0网络接口的IP地址。

(3)SPACE=$(df -hP | grep '/$' | awk '{print int($5)}')

       这行命令用于获取根分区的磁盘空间使用率。

       df -hP:显示磁盘空间的使用情况,-h参数表示以人类可读的格式显示,-P参数表示以POSIX格式显示。

       grep '/$':筛选出以/结尾的行,这通常是根分区的行。

       awk '{print int($5)}':使用awk工具从df的输出中提取第五列,即磁盘的使用率,并将其转换为整数。

       最终,SPACE变量将包含根分区的磁盘空间使用率(整数形式)。

(4)if [ $SPACE -ge 80 ]

       这是一个条件判断语句,检查SPACE变量的值是否大于或等于80。

(5)then

       如果上述条件为真(即磁盘使用率超过80%),则执行接下来的代码块。

(6)echo "$IP 服务器磁盘空间使率已经超过80%,请尽快及时处理。"|mail -s "$IP 服务器硬盘超过警戒告警" 124957736@qq.com

       这行命令发送一封警告邮件。邮件的内容包括服务器的IP地址和一条消息,指出服务器的磁盘空间使用率已经超过80%,需要及时处理。邮件的收件人是 124957736@qq.com,邮件的标题是$IP 服务器硬盘告警。

(7)fi

       结束if条件语句。

(8)echo "SPACE value: $SPACE"

       这行命令在终端上显示SPACE变量的值,即根分区的磁盘空间使用率。

(二)脚本验证

1、脚本编辑

        使用编辑器,比如vi,把代码输入进去;

        保存这个脚本到一个文件中,比check_space.sh

2、给予执行权限

      chmod +x w check_space.sh

3、运行脚本,查看效果

        可以运行这个脚本来检查进程的运行情况,如下:

[121yunwei@ecs-52a1 home]$ dfFilesystem     1K-blocks     Used Available Use% Mounted ondevtmpfs         3961580        0   3961580   0% /devtmpfs            3976852        0   3976852   0% /dev/shmtmpfs            3976852   401964   3574888  11% /runtmpfs            3976852        0   3976852   0% /sys/fs/cgroup/dev/vda1      102948772 86067012  12251796  88% /tmpfs             795368        0    795368   0% /run/user/1003[121yunwei@ecs-52a1 home]$[121yunwei@ecs-52a1 home]$[121yunwei@ecs-52a1 home]$ sh check_space.sh 服务器磁盘空间使率已经超过80%,请及时处理。SPACE value: 88[121yunwei@ecs-52a1 home]$ [121yunwei@ecs-52a1 home]$

四、扩展

        在实际使用中,系统硬盘可能有多个,你可能可以需要更改检测的硬盘,以及调整告警阈值,你可稍微做些修改,就可以适合您的应用了。比如,设对应的硬盘的空间阈值,并把80%的阈值改成90%,你可以更改如下两行命令即可:

SPACE=$(df -hP | grep '/run$' | awk '{print int($5)}')

 if [ $SPACE -ge 90 ]

也许您对下面的内容还感兴趣: