
私たちはパーティションの使用済みスペースを追跡したいと思います/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
。直接インポートしてから2行目(NR==2
awk)を見ると、ヘッダーをスキップできます。これを念頭に置いて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)
}
}'