Shellscript: Router Shutdown

Post Reply
Message
Author
darkchill

Shellscript: Router Shutdown

#1 Post by darkchill »

Hi,

ich hab folgendes Problem.

Ich will einen Router aufsetzten und da mir ein Dauerbetrieb zu viel Strom kostet, will ich ihn ausschalten wenn ihn keiner brauch.

In meinem Netzwerk befinden sich 3 PC´s
1 - 10.0.0.1
2 - 10.0.0.2
3 - 10.0.0.3

Das Script soll PC1 anpingen und wenn der Rechner nicht reagiert soll er PC2 anpingen usw.
Falls eins PC antwortet soll das Script beendet werden.
Und afalls alle Pings negativ waren, soll shutdown-h now ausgeführt werden.
Per Cron Job lass ich das Script 10 minütig laufen.

Ich hab versucht die Ping-Routine mit if-else zu machen, ging aber irgendwie nicht. Ich musste immer wenn ein Ping fehlgeschlagen war den Ping Vorgang mit STRG+C unterbrechen bevor der 2 Ping starten konnte.

Und im Pinmg Befehl selbst hab ich auch keine IP-Range Funktion gefunden die z.B. ping 10.0.0.1-3 durchführt.

Wie kann ich die Ping Routine durchführen??

ratte

Re: Shellscript: Router Shutdown

#2 Post by ratte »

Auszug aus <b>man ping</b>: -c count Stop after sending count ECHO_REQUEST packets.

noch Fragen?

ratte

Zaphod

Re: Shellscript: Router Shutdown

#3 Post by Zaphod »

Hi!

Ich habe in etwa das selbe gemacht, einfach mit einem Fileserver anstatt einem Router. Vielleicht kannst du mein Script als Ausgangslage gebrauchen:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/bash
#==========================================================#
# alive - check wether a host is still running #
#==========================================================#

alive=0

ZAPHOD="10.42.1.1"
ARTHUR="10.42.1.2"
FORD="10.42.1.3"
MARVIN="10.42.1.4"
MARVIN_WLAN="10.42.3.1"

if ping -c 1 -w 1 $ZAPHOD >/dev/null
then alive=1
fi

if ping -c 1 -w 1 $ARTHUR >/dev/null
then alive=1
fi

if ping -c 1 -w 1 $FORD >/dev/null
then alive=1
fi

if ping -c 1 -w 1 $MARVIN >/dev/null
then alive=1
fi

if ping -c 1 -w 1 $MARVIN_WLAN >/dev/null
then alive=1
fi

if [ $alive -eq 0 ]
then echo "$(date) - clients are down" >> /var/log/ping_shutdown.log
pstree |grep fs_backup >/dev/null
if [ $? -eq 0 ]
then echo "$(date) - fs_backup is running" >> /var/log/ping_shutdown.log
echo "$(date) - don't shut down" >> /var/log/ping_shutdown.log
else
echo "$(date) - fs_backup is not running" >> /var/log/ping_shutdown.log
/sbin/halt -p
echo "$(date) - shutting down" >> /var/log/ping_shutdown.log
fi
#else
# echo "$(date) - clients are alive" >> /var/log/ping_shutdown.log
fi
</font><hr></pre></blockquote>

Es liesse sich sicherlich etwas einfacher schreiben (z.B. ping innerhalb einer Iteration über ein Array mit IP-Adressen), aber es funktioniert und was will man mehr?

Gruss,
Zaphod

Zaphod

Re: Shellscript: Router Shutdown

#4 Post by Zaphod »

Noch eine kurze Anmerkung: Ich gehe davon aus, dass du auf dem Router GNU/Linux verwendest. Beim Ping anderer Unix-System (z.B. FreeBSD) müsste der Aufruf

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
ping -c 1 -t 1 $IP
</font><hr></pre></blockquote>

sein.

Zaphod

Re: Shellscript: Router Shutdown

#5 Post by Zaphod »

Und wenn du mehrere Hosts auf einmal pingen willst, solltest du dir mal fping ansehen. Bei FreeBSD kannst du es einfach aus den Ports installieren:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#cd /usr/ports/net/fping
#make install clean
</font><hr></pre></blockquote>

Für Debian GNU/Linux gibt es <!--http--><a href="http://packages.debian.org/cgi-bin/sear ... elease=all" target="_blank">ein Package</a><!--url--> und sonst musst du es <!--nohttp--><a href="http://ftp://ftp.stanford.edu/dept/netw ... 2b1.tar.gz" target="_blank">aus den Quellen kompilieren</a><!--url-->.

darkchill

Re: Shellscript: Router Shutdown

#6 Post by darkchill »

Danke für alle Postings.

Das mit dem -c wusste ich schon. Das hatte nichts mit der STRG+C unterbrechung zu tun die ich immer machen musste.

Das fping schau ich mir mal genauer an. Und das Script werd ich auch mal modifizieren.

Danke nochmals

Post Reply