bash + 监视磁盘空间使用情况,如果使用空间达到阈值则执行脚本

bash + 监视磁盘空间使用情况,如果使用空间达到阈值则执行脚本

我们想要跟踪/var/hadoop/hdfs分区的已使用空间,如果已使用空间更多,那么50%我们运行脚本 – do_action.bash,最后这个命令应该在 crontab 中,并且应该每 1 小时运行一次

hdfs分区示例

df -Ph | grep 'hdfs'
/dev/sdc                     20G  1.7G   18G   9% /var/hadoop/hdfs

到目前为止我们所做的是打印以下语法"run the script do_action.bash",以防阈值大于50%用过的 ,

df -Ph | grep 'hdfs' | sed s/%//g | awk '{ if($5 > 50) print "run the scriot do_action.bash"}'

但如何添加脚本的执行 -do_action.bash

我们尝试

df -Ph | grep 'hdfs' | sed s/%//g | awk '{ if($5 > 50) print "run the scriot do_action.bash"}' && bash /opt/do_action.bash

但上面是不正确的,因为脚本- /opt/do_action.bash在任何情况下都会运行

答案1

您可以运行df /path/to/directory以获取df该目录的输出。例如,在我的系统上:

$ df -Ph /home/terdon
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p6  669G  186G  450G  30% /home

所以你不需要grep hdfs,你可以直接获取它,然后只需查看第二行(NR==2在 awk 中)即可跳过标题。考虑到这一点,您可以awk使用设置退出状态exit()并将其与常规 shell 一起使用&&来执行脚本。像这样的东西:

df -Ph /var/hadoop/hdfs | tr -d '%' | 
    awk 'NR==2{ exit $5>50 ? 0 : 1}' && /opt/do_action.bash

或者甚至更短:

df -Ph /var/hadoop/hdfs | awk 'NR==2{exit ((0+$5) <= 50)}' && /opt/do_action.bash

&&意思是“如果上一个命令成功,则仅运行下一个命令”。如果大于,则将exit $5>50 ? 0 : 1awk 命令的退出代码设置为 0(成功),因此脚本仅在 时运行。$550$5>50

这是第一个 awk 脚本,以更详细但更易于理解的形式编写:

awk '{ 
        if(NR==2){ 
            if($5>50){
              exitStatus=0
            }
            else{
               exitStatus=1
            }
            exit(exitStatus)
        }
    }'

相关内容