PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shellscript und pingverarbeitung?



_Cyber_
27.07.04, 22:18
ich versuche nun schon des längeren ein script zu schreiben, welches mir die aktion XXX (ist nicht wirklich wichtig, aktion XXX funktioniert schon so gut wie) ausführt wenn der ping auf eine bestimmte ip-adresse fehlschlägt.

wie soll ich das mittels shellscript schaffen? das script soll die ganze zeit über laufen und ständig 192.168.100.1 pingen. sobald die ip für 3 pings nicht mehr erreichbar ist soll aktion XXX durchgeführt werden ...

bitte um hilfe, bin schon am verzweifeln!

>>>Cyber

JDieskau
27.07.04, 22:25
Hier nen Beispiel, ganz simpel...:

while [ $(ping -c 3 192.168.0.11 | grep -c "0 received") = 0 ]
do
echo "Alles in Butter, ich schau in 10 Sekunden nochmal :D"
sleep 10
done
/pfad/zu/deinem/script.sh


EDIT: mbo's Script ist natürlich besser. An $? hab ich garnicht gedacht... ist ja schon spät heut :D

mbo
27.07.04, 22:25
ich versuche nun schon des längeren ein script zu schreiben, welches mir die aktion XXX (ist nicht wirklich wichtig, aktion XXX funktioniert schon so gut wie) ausführt wenn der ping auf eine bestimmte ip-adresse fehlschlägt.

wie soll ich das mittels shellscript schaffen? das script soll die ganze zeit über laufen und ständig 192.168.100.1 pingen. sobald die ip für 3 pings nicht mehr erreichbar ist soll aktion XXX durchgeführt werden ...

bitte um hilfe, bin schon am verzweifeln!

>>>Cyber
Hm, vielleicht gehts auch mit Pausen?

while true then
do
ping -c 1 ziel
if [ $? != 0 ] then
aktion 1
fi;
sleep 5
done

Das wäre eine einfache while-Schleife, was natürlich nicht die Lösung darstellt, aber als Ansatz dienen könnte.

Oder mit Perl mittels befehlsaufruf und read stdout und co ... aber da denk ich jetzt net mehr drüber nach ;)

cu/2 iae

PS: wart noch ne weile, die "Scripter" stehen demnächst auf, bzw. beenden ihr UT ;)

_Cyber_
27.07.04, 22:41
mit perl ists leider zu vergessen, auf die weise hab ichs schon probiert. problem ist hierbei, dass debian 3.0 in der version 5.6.1 dabei ist und keine andere verfügbar ist. in dieser version ist allerdings das NET::Ping modul nicht ganz in ordnung, da geht das script dann immer in der schleife weiter ... blöd!

habe manuell schon perl 5.8.X raufkompiliert, hat zur folge gehabt dass ich meinen router neu installieren hab dürfen ... da ist was schiefgegangfen, apt-get war so gut wie tot, .... aber net::ping hat gefunzt ... bäh

ich versuche mal mit den beiden oben geschriebenen versionen was anzufangen (:

thxn einstweilen, bin aber immer für mehr antworten in diesem thread offen (:

>>>Cyber

Jasper
27.07.04, 23:03
while true; do
if ! ping -q -c 3 -i 5 -w 15 >/dev/null; then
<aktion>
break
fi
sleep 15
done


-j

mbo
27.07.04, 23:29
while true; do
if ! ping -q -c 3 -i 5 -w 15 >/dev/null; then
<aktion>
break
fi
sleep 15
done


-j
Sag ich doch, die stehn gegen Mitternacht auf ... ;)

cu/2 iae

_Cyber_
28.07.04, 00:56
while true; do
if ! ping -q -c 3 -i 5 -w 15 >/dev/null; then
<aktion>
break
fi
sleep 15
done


-j


die option "-w" gibts anscheinend nicht!
und: machts da nen unterschied wo ich die zielip hinschreibe?

vielen dank! (:

>>>Cyber

peschmae
28.07.04, 11:19
nächster Vorschlag der das gleiche macht wie alle andern auch dafür aber kürzer sein tut :p



while true; do
ping -c 3 192.168.1.11 2<&1 > /dev/null || echo ging nicht
sleep 10
done


MfG Peschmä

Jasper
28.07.04, 12:49
die option "-w" gibts anscheinend nicht!
keine option '-w' ? '-w' ist ein timeout nachdem mein ping abbricht. ist gut wenn die gegenseite pakete einfach droppt.




und: machts da nen unterschied wo ich die zielip hinschreibe?


einfach nach den optionen angeben, hatte ich vergessen:

ping -q -c 3 -i 5 <ziel> >/dev/null


-j

Jasper
28.07.04, 12:58
ping -c 3 192.168.1.11 2<&1 > /dev/null || echo ging nicht



was bezweckst du mit '2<&1'?


-j