Linux

bash + 監控磁碟空間使用情況並在使用空間達到門檻值時執行腳本

  • August 4, 2022

我們要跟踪/var/hadoop/hdfs分區的已用空間,如果已用空間更多,50%那麼我們執行腳​​本 -do_action.bash最後這個命令應該在 crontab 中,並且應該每 1 小時執行一次

分區 hdfs 範例

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

到目前為止,我們所做的是下面的 print 語法,"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無論如何都會執行

您可以執行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中)跳過標題。考慮到這一點,您可以使用正常 shell設置awk退出狀態並使用它來執行腳本。像這樣的東西:exit()``&&

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)
       }
   }'

引用自:https://unix.stackexchange.com/questions/712431