私のシステムのディスク使用量を確認するための単純なbashスクリプトを書いています。 whileループはパーティションの85%以上を印刷する必要があります。 90%以上の場合、2つのパーティションがありますが、最初のパーティションのみが出力に印刷されます。
パスワード:
#!/bin/bash
admin="[email protected]"
threshold="85"
df -h | tail -n +2 | awk '{print $1 " " $5}' | sed 's/.$//' | while read i; do
part=$(echo $i | awk '{print $1}')
util=$(echo $i | awk '{print $2}')
if [ $util -ge $threshold ]; then
echo $part is ${util}% full. An email has been sent to your administrator.
mail -s "Critical: $part is ${util}% full. Clear space immeadiately!" $admin
fi
done
出力:
/dev/mapper/rootvg-root is 92% full. An email has been sent to your administrator.
しかし、/dev/mapper/rootvg-appsも98%いっぱいになったことがわかります。
/dev/mapper/rootvg-apps 20G 20G 445M 98% /apps
/dev/mapper/rootvg-tmp 6.0G 2.4G 3.7G 39% /tmp
/dev/mapper/rootvg-var_log 6.0G 71M 6.0G 2% /var/log
/dev/xvda1 497M 142M 356M 29% /boot
ベストアンサー1
私の考えでは、出力に問題があるようですdf -h
。
試してみてくださいdf -Ph
修正する:
マニュアルページによると、-P
POSIX出力フォーマットを参照しています。
-P, --portability
use the POSIX output format
パーティション長が長く、-P
テキスト処理にコマンド(なし)を使用すると、予想される行出力は2行に分割されます。
予想(例):
/dev/mapper/rootvg-tmp/tmp1 86
/dev/mapper/rootvg-tmp/tmp2 90
/tmp 90
実際の出力(例):
/dev/mapper/rootvg-tmp/tmp1
86
/dev/mapper/rootvg-tmp/tmp2
90
/tmp 90
したがって、この場合、スクリプトの条件は一致せずfalseなので、最初の2つのパーティションと'{print $2}'
一致しません$util -ge $threshold
。
ファタイ