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??
Shellscript: Router Shutdown
Re: Shellscript: Router Shutdown
Auszug aus <b>man ping</b>: -c count Stop after sending count ECHO_REQUEST packets.
noch Fragen?
ratte
noch Fragen?
ratte
Re: Shellscript: Router Shutdown
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
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
Re: Shellscript: Router Shutdown
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.
<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.
Re: Shellscript: Router Shutdown
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-->.
<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-->.
Re: Shellscript: Router Shutdown
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
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