E-mail figyelmeztetés küldése alacsony CPU hűtő fordulatszám esetén

Fórumok

Sziasztok!

Van egy Debian Lennyvel telepített szerverem, amin fut a sensord. Ezt szépen felkonfiguráltam, csak egy dolgot nem tudok, hogy hogy lehetne megoldani benne. Szeretném, ha riasztás esetén e-mail üzenetet küldene egy megadott e-mail címre. Ezt a smartd-vel simán meg lehet tenni, így a winchester hiba esetén egyből tudok lépni, de miként lehetne ezt megtenni a sensord-vel? Jó lenne, mert nemrég volt egy gép, amiben a proci hűtő állt le, és ez okozta a hibát. Így már előre tudnám, ha valami készül, és felkészülten mehetnék a hiba elhárítására.

Tippeket és válaszokat előre is köszönöm!

Hozzászólások

Ha jártas vagy a bashben, akkor elég csak ennyit írnom:
crontab: sensors | grep | awk ( majd iffel feltételvizsgálat) | mail -t "venti hiba" mailcim

Azóta sikerült összeütnöm egy szkriptet. Íme:

sensors | grep fan1 | awk '{ if ($2 <= 2000) system ( "/usr/sbin/sendmail user@domain < /root/scripts/cpufanfail.eml" ) }'

Már csak azt kéne valahogy megoldani, hogy az elküldött e-mailben szerepeljen a fordulatszám. Ezt miként lehetne megtenni?

http://lm-sensors.org/browser/lm-sensors/trunk/prog/daemon/healthd.sh

a sensors.conf-ban kéne beállítanod a megfelelő riasztási határértékeket, itt pl. fan1_min = 2000, és ha ez alá esik a fordulatszám, akkor a sensors alarmozik.

----------------------------------
feel the beat - it's everywhere!

Ebből a sorból ( levélből ) tudod, hogy a fordulat 2000 vagy ( valamivel ) kisebb lehet.
Ha megnéznéd, hogy mennyi szokott lenni a minimum fordulat akkor az legyen a worning alatta 10%- al egy másik sorban az error levél.
sensors | grep fan1 | awk '{ if ($2 <= 1500) system ( "/usr/sbin/sendmail user@domain < /root/scripts/cpufanmin.eml" ) }'

sensors | grep fan1 | awk '{ if ($2 <= 1000) system ( "/usr/sbin/sendmail user@domain < /root/scripts/cpufanerr.eml" ) }'

De ha mindenáron a levélbe akarod a fordulatot az más. A fordulatszám egy változóból akár a levél subject- jébe ( tárgyába ) is kerülhet és akkor a levelet meg sem kell nyitnod, máris látod a fordulatszámot.
--
üdv: virtualm

Mi a búbánatért kell a sendmail? A cron szépen elküldi a script outputját a megfelelő usernek, vagy ha van, a crontab elején a "MAILTO"-ban megadott címre. És ha már awk, akkor csináljuk szépen a dolgot...:


sensors | awk '/fan1/ && $2<=1500 { rpm=$2; 
                                    while( getline < /root/scripts/cpufan.eml ) { 
                                         sub(/@FAN@/, rpm, $0);
                                         print;
                                         }
                                  }'

Úgy, hogy a crontab-ban az összes többi szirsz@rt megoldod, hogy ne legyen normál esetben outputja, és utána rábízni a cron-ra, hogy tolja a levelet.

Vagy kreálsz egy technikai usert, annka csinálsz egy crontabot a MAILTO-t megfelelően beállítod a crontabjában, aztán hajrá.

Melyik scriptről beszélsz? Én zeller megoldására gondoltam, aminél azt javasolta, hogy a crontab-ba rakjak mailto-t. Ennek nem változtatható a tárgya.
A fentebbi scriptekben meg nem működik a második $2, mint azt már írtam.

Csak most vettem észre, hogy lentebb ott a szripted, amire gondoltál. Azt még nem próbáltam, és persze látom, hogy hol lehet benne tárgyat állítani :)

Köszönöm.

Szinten csak tipp:
syslog-ba nyomatja a logokat, viszont syslog mintha tudna emilt kudleni (vagy rosszul emlekszem). Konzolra logolni mindenkeppen tud es masik gepre is...

Hmm, nem egyszeru. Esetleg a logcheck proggi?


#!/bin/bash
# **** SETTINGS
sensor_alarm_trigger=2000

mailto_address="root@localhost"
mail_subject="CPU FAN ALERT"

# **** SETTINGS END

szenzor_ertek=`sensors | grep 'CPU Fan' | cut -d "R" -f 1 | sed s/"[^0-9]"/""/g`
if [ $szenzor_ertek -lt $sensor_alarm_trigger ]
    then
    now=`date`
    echo "Error at $now. FAN SPEED IS: $szenzor_ertek" | mail -s "$mail_subject - $szenzor_ertek" $mailto_address
    exit 1
fi
exit 0

--
Coding for fun. ;)

A grep+cut+sed kombót szépen ki lehet váltani awk-kal, érdemes megjegyezni a sub(), illetve a gsub() funkcióit az awk-nak, sok csövet meg lehet vele spórolni:


szenzor_ertek=$(sensors | awk -FR '/CPU Fan/ { gsub( /[^0-9]/, "", $1); print $1; }')

A sub( minta, erre, hol) a minta első, leghosszabb előfordulását keresi és cseréli ki a 2. paraméterben megadottra a "hol"-ban. A gsub ugyanezt teszi a minta valamennyi előfordulásával.

Ja, ha már "szenzor_ertek", akkor a "now" is legyen "most"...