Cronjob - コマンド、電子メールからinode%を削除する

Cronjob - コマンド、電子メールからinode%を削除する

inodeが80%に達したときに電子メールを送信するcronスクリプトを開発しています。

#!/bin/bash
#
OUT=$(df -ih | sed -n '1!p') # remove first line because it's irrelevant - second line is important
RE="([0-9]+)%" # find first numerical item that has percentage sign with it
#
[[ "$OUT" =~ $RE ]]
#
PERCENT=${BASH_REMATCH[0]}
#
if [[ $PERCENT > 80 ]]; then
    OUT2=$(./send_email.sh)
    echo "${OUT2}"
fi

進行中ですが、あまり良くありません。

質問

80%に達すると、その番号を自分に電子メールで送信するために使用されたinodeスペースの割合をどのように知ることができますか?この問題を解決するより良い方法があるという提案で開かれています。

答え1

私はこれがよりきれいだと思います。

[ -n "$(df --output=ipcent | awk -F '%' 'NR>1 && $1>80')" ] && echo "80% hit."
  • df --output=ipcentinode パーセント列のみが出力されます。

  • awk -F '%' 'NR>1 && $1>80'ヘッダーをスキップして(使用NR>1)、パーセンテージが80%より大きいことを確認し、その場合はその行を印刷します。

テストでパイプ出力を確認してください-n。何かを印刷したらエクスポートechoしてください。echomailコマンドに置き換えられました。

答え2

一般的なGNUバージョンを使用している場合は、df以下をお勧めします。

#!/bin/bash
df -P | {
   full=()
   read header # discard the first line
   while read fs blocks used free cap mount
   do
       cap=${cap%?} # remove the last character
       [ $cap -ge 80 ] && full+=("$mount%$cap")
   done
   [ ${#full[@]} -ne 0 ] && send_email.sh "${full[@]}"
}

-P出力の各行がファイルシステムであることを確認してください。それ以外の場合、df出力を見やすくする面倒な改行の問題があります。

スクリプトは、マウントポイントに奇妙な文字(スペースなど)がないと仮定します。

send_email.shは、80%以上の使用量を持つファイルシステムのリストを提供します。形式は、マウントポイント、パーセント記号、および量です。必要に応じて調整してください。

関連情報