GNU/Linux >> Linux の 問題 >  >> Linux

ディスク使用量が90%を超えた場合にアラートメールを送信するシェルスクリプト?

ディスク使用量が90%を超えると自動的に電子メールアラートを送信し、95%を超えると2番目の電子メールアラートを送信するスクリプトをサーバーに実装したいと思います。私のファイルシステムはabc:/xyz/abcです マウントポイントは/pqrです 。

私はこれを試しました:

ADMIN="[email protected]" 
ALERT=90 
df -H | grep -vE 'abc:/xyz/pqr | tmpfs |cdrom' | awk '{ print $5 " " $1 }' | while read output; do 
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) 
  partition=$(echo $output | awk '{ print $2 }' ) 
    if [ $usep -ge $ALERT ]; then 
      mail -s "Alert: Almost out of disk space $usep" $ADMIN 
    fi 
  done

しかし、次のようなエラーが発生します

line 7: [: Use: integer expression expected 

承認された回答:

このエラーは、-geの引数の1つが原因です。 数値ではありません。 $ALERT以降 常に数値、$usep 犯人でなければなりません。 dhの出力を解析する方法にはいくつかの問題があります その結果、$usep 数値ではありません。

ファイルシステムの長さに応じて、dh 出力を複数の行に分割する場合があります。部分的な線がフィルターに捕らえられ、無意味なデータになります。この動作を回避し、dhから解析可能な出力を取得するには 、-Pを渡します オプション。

また、df ヘッダー行を出力しますが、これも無意味なデータになります。

フィルタはかなり複雑です。私はawkのシングルパスを使用します。さらに言えば、awk内のパーセンテージでフィルタリングを実行できます(ただし、次のスクリプトではフィルタリングを実行していません)。

df -H | awk '
    NR == 1 {next}
    $1 == "abc:/xyz/pqr" {next}
    $1 == "tmpfs" {next}
    $1 == "/dev/cdrom" {next}
    1 {sub(/%/,"",$5); print $1, $5}
' | while read filesystem percentage; do
    if [ "$percentage" -ge "$ALERT" ]; then 
      mail -s "Alert: Almost out of disk space ($usep%) on $filesystem" "$ADMIN"
    fi 
  done

NR==1 最初の行と一致するため、NR==1 {next} 最初の行をスキップします。次の数行では、一部のファイルシステムを除外しています(説明には、abc:/xyz/pqrに関心があると記載されていることに注意してください。 、しかしあなたのコードはそれを除外します)。最後のawk行は%を削除します 印刷する前にパーセンテージ列から。

すべてのファイルシステムについて1通のメールを送信する方がよいでしょう。今回はすべての分析をawkで行っています。

message=$(df -h | awk -v ALERT="$ALERT" '
    NR == 1 {next}
    $1 == "abc:/xyz/pqr" {next}
    $1 == "tmpfs" {next}
    $1 == "/dev/cdrom" {next}
    1 {sub(/%/,"",$5)}
    $5 >= ALERT {printf "%s is almost full: %d%%n", $1, $5}
')
if [ -n "$message" ]; then
  echo "$message" | mail -s "Alert: Almost out of disk space" "$ADMIN"
fi 

Linux
  1. シェルスクリプトでCPU使用率を取得しますか?

  2. シェルスクリプトの並列実行

  3. Bash モニターのディスク使用量

  1. mailコマンドを使用してLinuxターミナルまたはスクリプトから電子メールを送信する

  2. 実行時にスクリプトでシェルを決定しますか?

  3. 星のピラミッドを出力するシェルスクリプト

  1. シェルスクリプトを使用して HTML メールを送信する

  2. Linux シェルスクリプトからメールを送信する

  3. シェルスクリプトの現在のディレクトリ?