Linux
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
到目前為止,我們所做的是下面的 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) } }'