GNU/Linux >> Znalost Linux >  >> Linux

Shell Script pro odeslání e-mailu s upozorněním, pokud využití disku překročí 90 %?

Chci implementovat skript na svůj server, který bude automaticky odesílat e-mailová upozornění, pokud využití disku překročí 90 %, a druhé e-mailové upozornění, když překročí 95 %. Můj souborový systém je abc:/xyz/abc a bod připojení je /pqr .

Zkoušel jsem toto:

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

Ale dostávám chybu, která říká

line 7: [: Use: integer expression expected 

Přijatá odpověď:

Chyba je způsobena jedním z argumentů -ge není číselný. Od $ALERT je vždy číselné, $usep musí být viníkem. Existuje několik problémů se způsobem, jakým analyzujete výstup dh což má za následek $usep není číselný.

V závislosti na délkách souborových systémů dh může rozdělit svůj výstup na několik řádků. Částečné čáry budou zachyceny ve vašem filtru a výsledkem budou nesmyslná data. Chcete-li se tomuto chování vyhnout a získat analyzovatelný výstup z dh , předejte -P možnost.

Také df vytiskne řádek záhlaví, což opět povede k nesmyslným datům.

Váš filtr je poměrně složitý. Použil bych jeden průchod awk. V tomto případě můžete provést filtrování podle procenta uvnitř awk (ale v následujícím skriptu jsem to neudělal).

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 odpovídá prvnímu řádku, takže NR==1 {next} přeskočí první řádek. Následující řádky vylučují některé souborové systémy (všimněte si, že váš popis říká, že vás zajímá abc:/xyz/pqr , ale váš kód to vylučuje). Poslední řádek awk odstraní % ze sloupce procent před tiskem.

Bylo by lepší poslat jeden mail o všech souborových systémech. Tentokrát provádím veškerou analýzu v 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. Časový limit ve skriptu Shell?

  2. Skript Shell visí na příkazu Mail?

  3. Procesy v relaci v interaktivním prostředí versus ve skriptu?

  1. Skript nebo program pro protokolování využití disku?

  2. Získat využití CPU v shell skriptu?

  3. Odesílání HTML pošty pomocí shell skriptu

  1. Odeslání pošty z linuxového shell skriptu

  2. Výpočet zaokrouhlených procent v Shell Script bez použití bc

  3. Transliterační skript pro linuxové prostředí