PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [bash] überwachungsscript



pi-cubiq
20-04-2004, 18:33
hi folks,
ich sitze gerade vor dem auftrag, ein simples bash-überwachungsscript zu schreiben, was das folgende tut: es überwacht den DSL access-concentrator, falls er nicht erreichbar ist, soll die kiste beepen, falls erreichbar in 5 min noch einmal checken. hier ist mein script-versuch:


#!/bin/sh

iface=eth1
timeout=3

checkmac()
{
req_mac=`/usr/sbin/pppoe -I $iface -A -T $timeout | grep '\([[:xdigit:]]\{2\}:\)\{5\}[[:xdigit:]]\{2\}' | cut -b 22-`
echo "$req_mac" | grep '^\([[:xdigit:]]\{2\}:\)\{5\}[[:xdigit:]]\{2\}$' > /dev/null

if #grep hat eine MAC gefunden
then
sleep 300
checkmac
else
beeper
sleep 30
checkmac
fi
}

beeper()
{
while $i
do
echo -en "\033[10;500]\033[11;200]\007" > /dev/tty0
sleep 0.5
done
}


ich mache also folgendes: ich schneide das output von `pppoe -A` so zurecht, dass nur die mac-adresse in einer zeile vorhanden ist (req_mac). wenn dann der grep die mac zurueck gibt, ist der AC-link vorhanden, sonst nicht.

hier ist das output von `pppoe -A`:
Access-Concentrator: MUNX13-erx
Got a cookie: e6 6d 46 7a 3d ee 77 62 9a f1 a5 1c f5 1c e0 ba
AC-Ethernet-Address: 00:90:1a:10:22:28
--------------------------------------------------

da `pppoe -A` nicht terminiert habe ich noch einen timeout-befehl oben im script (-T timeout) hinzugefügt (oder wie kann man sonst einen nicht terminierenden prozess "greppen"?).

da ich mit bash-scripting nicht so viel am hut habe, kann es gut sein, dass die lösung extrem umständlich ist. solange sie aber funktioniert, wäre ich froh, kann mir jemand einen tip geben, wie ich das script fertig schreibe? ich habe momentan nur pseudo-code bei der if-abfrage stehen...

vielen dank für eure hilfe!

peschmae
20-04-2004, 20:53
grep --quiet
suchst du. Das gibt nichts aus wenns was findet und auch sonst nicht. Wenns was findet gibts aber nen anderen Rückgabewert (0 vermutlich) als wens nichts findet (was anderes)

Also:


if $(echo "$req_mac" | grep --quiet '^\([[:xdigit:]]\{2\}:\)\{5\}[[:xdigit:]]\{2\}$' ); then
..


Wenns nicht geht dann lags daran dass du von der Pipe her den Rückgabewert von Echo und nicht den von Grep erhältst. Aber ich glaube du kriegst den vom letzten Prozess. Also hoffen wir mal dass es geht :cool:

MfG Peschmä

pi-cubiq
20-04-2004, 21:15
mittlerweile habe ich das problem so geloest:


#!/bin/sh
#
#######################
# adjust the settings #
#######################
iface=eth1
ac_timeout=1
sleep_ok=0
sleep_down=1
#######################

checkmac()
{
req_mac=`/usr/sbin/pppoe -I $iface -A -T $ac_timeout | grep '\([[:xdigit:]]\{2\}:\)\{5\}[[:xdigit:]]\{2\}' | cut -b 22-` 2>/dev/null
check=`echo "$req_mac" | grep '^\([[:xdigit:]]\{2\}:\)\{5\}[[:xdigit:]]\{2\}$'`
if [ "$check" == "" ]
then
status=0
echo "[ !! ] --- AC not reachable"
beeper
sleep $sleep_down
checkmac

else
status=1
echo "[ ok ] --- AC reachable"
sleep $sleep_ok
checkmac
fi
}

beeper()
{
while [[ ${status} == 0 ]]
do
echo -en "\033[10;500]\033[11;200]\007" > /dev/tty0
sleep 0.5
done
}

checkmac

nur beim fehlerfall hört das ding nicht mehr auf zu beepen...:rolleyes:

peschmae
20-04-2004, 21:21
Klar. Aber das ist nicht hübsch ;)
(Ok, die ganze Sache ist recht hässlich - aber das gibts bei mir auch immer wieder Hauptsache es geht ;))

Gehts mit meinem auch?

MfG Peschmä

pi-cubiq
20-04-2004, 21:29
ich schäme mich ja, ich weiß das der code übel ist. aber jeder hat klein angefangen. ich werde irgendwann (hoffentlich) über diesen code lachen :)

jetzt aber zum script: mit deiner variante geht es leider nicht....wieso weiß ich nicht.

kannst du mir noch sagen, wie ich die beeper-funktion stoppe, wenn ein link wieder hergestellt worden ist?

peschmae
21-04-2004, 06:38
von hand stoppen oder automatisch?

Wenn Automatisch würde ich das etwa so machen:


beeper()
{
for ((i = 0; i < 30; i++))
do
echo -en "\033[10;500]\033[11;200]\007" > /dev/tty0
sleep 0.5
done

checkmac
}


d.h. er guckt alle 15 Sekunden ob die Verbindung wieder da ist. Könntest du die eigentlich nicht auch gleich automatisch wieder aufbauen lassen?

MfG Peschmä

pi-cubiq
21-04-2004, 11:30
das scheint genau das zu sein, was ich brauche. danke! ich werde es zu implementieren versuchen!

gruß,

pi