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!
- 2279 megtekintés
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
- A hozzászóláshoz be kell jelentkezni
Köszönöm. Tippnek nem rossz, de nem lehet valahogy a sensors3.conf-ból automatizálni. Jó lenne ha bármilyen szenzor hibára automatikusan küldené a levelet.
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
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!
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Pont erre gondoltam. Mármint hogy beraknám a tárgyba az értéket. De ezt miként tudom megtenni a szkriptből?
- A hozzászóláshoz be kell jelentkezni
sensors | grep fan1 | awk '{ if ($2 <= 1500) system ( "cat /root/scripts/cpufan.eml | sed s/@FAN@/$2/g | /usr/sbin/sendmail user@domain" ) }'
A levélbe meg @FAN@-t írsz oda, ahová az értéked kéred (subject-be, body-ba stb.)
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam, de valamiért nem működik. Ha a sed után a $2 helyére kézzel beírok egy számot, akkor tényleg kicseréli arra a levélben, de ha marad a $2, akkor a levélben a @FAN@ szöveget üresre cseréli.
- A hozzászóláshoz be kell jelentkezni
Az awk-ban van értéke a $2-nek, a sed-nél csak akkor lenne, ha azt előtte valaki beállítaná...
- A hozzászóláshoz be kell jelentkezni
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;
}
}'
- A hozzászóláshoz be kell jelentkezni
Azért szeretnék sendmailt használni, mert nekem a crontabban lefutó cuccok közül csak ennek az eredménye kéne e-mailben. Az általad leírt szkript csinos, és jól is működik, de hogyan lehetne módosítani, hogy az eredményt leküldje egy megadott e-mail címre?
- A hozzászóláshoz be kell jelentkezni
Ú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á.
- A hozzászóláshoz be kell jelentkezni
És miként tudnám megadni a crontab-nál, hogy mi legyen az általa küldött e-mail tárgya, illetve feladója?
- A hozzászóláshoz be kell jelentkezni
Nézted a scriptet fentebb? Áááá.... Email tárgya...
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
A tárgy az a cron által megírt lesz, ez igaz, az eredeti feladatban, pontosabban az eredeti megoldásban sem volt egyedi tárgy megadva.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
ágyúval verébre: webmin + webmin-sysstats modul?
:)
google says: http://lm-sensors.org/browser/lm-sensors/trunk/prog/daemon/healthd.sh
----------------------------------
feel the beat - it's everywhere!
- A hozzászóláshoz be kell jelentkezni
Ha mar agyu: esetleg Nagios :)
- A hozzászóláshoz be kell jelentkezni
#!/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
- A hozzászóláshoz be kell jelentkezni
`` -> $()
t
- A hozzászóláshoz be kell jelentkezni
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"...
- A hozzászóláshoz be kell jelentkezni
;) Szép. A 2.0 verzióban felhasználom. :D Most csak azt kéne kitalálni, hova lett a topikindító... Jó lenne, ha tudatná, hol áll a dolog.
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Itt a topik indító :)
És köszönöm a szép szkriptet, magamtól nem tudtam volna megcsinálni.
Még egyszer köszönöm mindenkinek a segítséget!
- A hozzászóláshoz be kell jelentkezni
Nem annyira szép, de elvégzi a feladatot. 5 perc alatt ennyire tellett... De láthatod, van már hozzá patch is. :D
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni