目 录
一、要求
二、解决方案
(一)解决思路
(二)方案
三、脚本程序实现
(一)脚本代码和解释
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 ]