Linux检查磁盘剩余使用空间并制作成提醒脚本

2021-08-22 1499点热度 0人点赞 0条评论

需求

服务器运行时,最好能自动监控磁盘的剩余使用量,如果小于一定的值,就发报警提醒到运维工程师

磁盘检查命令

我们平时登录Linux后,查看磁盘状况的命令是df

# df -h 以G为单位显示整个磁盘使用情况,可以看到Filesystem我这边有两块硬盘(/dev/vda1,/dev/vdb1)Avail下显示的就是剩余的空间
[root@ecs-587c opt]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        486M     0  486M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   38M  458M   8% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
/dev/vda1        40G  3.7G   34G  10% /
tmpfs           100M     0  100M   0% /run/user/0
/dev/vdb1        12G  309M   11G   3% /storage

但是如果要写成脚本,让脚本判断剩余磁盘空间,那上面的输出有点太多了,而且以字节显示为好(以字节显示比较好办,直接df就可以了)

使用df -k /path 可以输出/path所在的硬盘的磁盘空间,这样又可以减少一部分不需要的信息

我以我这边/storage是挂载的另一个硬盘(/dev/vdb1)为例,我查看/dev/vdb1 的空间:

# 查看/storage所在硬盘的磁盘使用情况,以字节为单位
[root@ecs-587c storage]# df -k /storage/
Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/vdb1       12318856 315932  11357448   3% /storage

# 查看/storage所在硬盘的磁盘使用情况,以GB为单位
[root@ecs-587c /]# df -k -h /storage/
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb1        12G  309M   11G   3% /storage

不过我们还是希望只需要将Available剩余空间作为变量输出就可以了,可以这样做:

# 输出当前路径的磁盘剩余量(字节为单位)
[root@ecs-587c storage]# df --output=avail -k "$PWD" | sed '1d;s/[^0-9]//g'
11357448

# 也可以这样写
[root@ecs-587c storage]# df -k --output=avail "$PWD" | tail -n1
11357448

# 输出指定路径的磁盘剩余量(字节为单位)
[root@ecs-587c storage]# df --output=avail -k /storage | sed '1d;s/[^0-9]//g'
11357448

# 输出指定路径的磁盘剩余量(GB为单位)
[root@ecs-587c storage]# df --output=avail -k -h /storage | sed '1d;s/[^0-9]//g'
11

检查脚本实现

有了以上的测试,我们可以写出检查磁盘剩余空间的脚本了,如下(checkDiskSpace.sh):

#!/bin/bash

# -----------------------------------------------------------------------------------------
# 检查磁盘可用空间是否达到报警值,并发送提醒
# -----------------------------------------------------------------------------------------
# 排程(每隔2小时的12分,检查): 12 */2 * * * /path/to/checkDiskSpace.sh

CHECK_PATH=/storage # 需要检查磁盘的PATH
declare -i THRESHOLD_IN_GB=52 # 需要报警的阈值
THRESHOLD=$(( THRESHOLD_IN_GB*1024*1024 ))
#echo "$THRESHOLD"
FREE=`df -k --output=avail "$CHECK_PATH" | tail -n1`
if [[ $FREE -lt $THRESHOLD ]]; then
    echo "$CHECK_PATH less than $THRESHOLD_IN_GB GB, please check!!!"
    # 你可以使用你的方式,发送提醒给自己,例如钉钉提醒
fi;

然后crontab写个排程就可以啦。Linux下排程的文章,详见:https://blog.terrynow.com/2021/05/24/linux-crontab-scheduled-tasks-intro-example-and-notes/

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论