我们想要跟踪/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 : 1
awk 命令的退出代码设置为 0(成功),因此脚本仅在 时运行。$5
50
$5>50
这是第一个 awk 脚本,以更详细但更易于理解的形式编写:
awk '{
if(NR==2){
if($5>50){
exitStatus=0
}
else{
exitStatus=1
}
exit(exitStatus)
}
}'