yae*_*ael 2 linux bash cron rhel awk
我们想要跟踪/var/hadoop/hdfs分区的已用空间,如果已用空间更多,那么50%我们运行脚本 \xe2\x80\x93 do_action.bash,最后这个命令应该在 crontab 中并且应该每 1 小时运行一次
hdfs分区示例
\ndf -Ph | grep 'hdfs'\n/dev/sdc 20G 1.7G 18G 9% /var/hadoop/hdfs\nRun Code Online (Sandbox Code Playgroud)\n到目前为止我们所做的是打印以下语法"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"}'\nRun Code Online (Sandbox Code Playgroud)\n但如何添加脚本的执行 -do_action.bash
我们尝试
\ndf -Ph | grep 'hdfs' | sed s/%//g | awk '{ if($5 > 50) print "run the scriot do_action.bash"}' && bash /opt/do_action.bash\nRun Code Online (Sandbox Code Playgroud)\n但上面\xe2\x80\x99t是正确的,因为脚本- /opt/do_action.bash在任何情况下都会运行
您可以运行df /path/to/directory以获取df该目录的输出。例如,在我的系统上:
$ df -Ph /home/terdon
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p6 669G 186G 450G 30% /home
Run Code Online (Sandbox Code Playgroud)
所以你不需要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
Run Code Online (Sandbox Code Playgroud)
或者甚至更短:
df -Ph /var/hadoop/hdfs | awk 'NR==2{exit ((0+$5) <= 50)}' && /opt/do_action.bash
Run Code Online (Sandbox Code Playgroud)
&&意思是“如果上一个命令成功,则仅运行下一个命令”。如果大于 ,则将exit $5>50 ? 0 : 1awk 命令的退出代码设置为 0(成功),因此脚本仅在 时运行。$550$5>50
这是第一个 awk 脚本,以更详细但更易于理解的形式编写:
awk '{
if(NR==2){
if($5>50){
exitStatus=0
}
else{
exitStatus=1
}
exit(exitStatus)
}
}'
Run Code Online (Sandbox Code Playgroud)