#!/bin/bash
df -m > myfile
server_ip_address=$(ip addr show $(ip route | awk '/default/ { print $5 }') | grep "inet" | head -n 1 | awk '/inet/ {print $2}' | cut -d'/' -f1)
if awk '$2 > 10000 && $5 > 90' myfile ; then
echo "Disk Full in $server_ip_address"
else
echo "Nothing wrong with the server"
fi
スクリプトを実行すると、常にディスクがいっぱいであると出力されます。 df -m の出力は次のようになります。
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/centos-root 949305 512827 436479 55% /
devtmpfs 3811 0 3811 0% /dev
tmpfs 3823 0 3823 0% /dev/abc
tmpfs 3823 18 3806 1% /run
tmpfs 3823 0 3823 0% /sys/fs/cgroup
/dev/sda2 1014 175 840 18% /boot
/dev/sda1 1022 12 1011 2% /boot/efi
tmpfs 765 0 765 0% /run/user/2000
df -m の出力はサーバーごとに異なります。したがって、サイズ> 10GB、使用率> 90%を比較します。 10 GB未満の一部のディスクサイズは、90%未満のディスク使用量にとって重要ではない場合があります。
アップデート1:
GNU bash、バージョン 4.2.46(2)-リリース(x86_64-redhat-linux-gnu)
オペレーティングシステムはセントース7です
現在のコードの問題:
2番目の行の列を最後の行と比較する必要がありますが、現在のコードが最初の行の列を比較しているため動作しないようです。問題を解決するには?
答え1
現在のコードの問題は、df -Hの出力が常にGB単位ではないことです。
ここへの答えは使用しないことです-H
。文書で説明されているように、man df
これは「人間が読める出力」として意図されており、単位は意図的に変更される可能性があります。
代わりに、固定単位(デフォルトのKBまたはMB(-m
))を使用してください。
Nagios(Icinga)についても知りたいかもしれません。これは、現在扱っている監視タイプを正確に処理するためのスクリプトを含む監視ツールです。
スクリプトを実行すると、常にディスクがいっぱいであるという出力が表示されます。
これは、スクリプトの実行中にエラー(ファイルが見つからない、構文エラーなど)が発生した場合、またはスクリプトがゼロ以外の特定の状態で終了しない限り、常に正常に終了するため、if awk ...
常にtrueを返すためです。awk
私はこのようにスクリプトを書くことを検討する傾向があります。
#!/bin/sh
myIP=$(
ip -j route |
jq -r '.[] | select(.dst == "default") | .gateway'
)
df=$(
df -lm -x tmpfs |
awk '
NR==1 { header=$0 }
$5+0 > 90 { if (length(header)) { print header; header="" }; print }
'
)
if [ -n "$df" ]
then
echo "Problems with server $myIP"
echo
echo "$df"
else
echo "Disk space seems ok on $myIP"
fi