PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Runterfahren wenn kein client mehr verbunden



Fancyfr0g
27.02.10, 18:46
Hallo zusammen

Habe mir letztens ein script zusammengeschustert. Bin allerdings kein Programmierfuchs und meine scripte sind meistens etwas chaotisch.

Aufgaben des Scripts:
Runterfahren wenn Client mit IP-Adresse 192.168.2.150 nicht mehr verbunden ist (mit mehreren Überprüfungen)


#!/bin/bash

down () {

sleep 300

if [[ "$(netstat -tn | awk '{print $5}' | grep 150 | sed -ne 1p |rev|cut -c7-20|rev)" != 192.168.2.150 ]]

then poweroff

else sleep1

fi
}

sleep1 () {


if [[ "$(netstat -tn | awk '{print $5}' | grep 150 | sed -ne 1p |rev|cut -c7-20|rev)" != 192.168.2.150 ]]

then down

else sleep 120

sleep1

fi
}

sleep 300
sleep1



Nun das Script funktionierte beim ersten Test super, nur bei weiteren Malen fuhr der Rechner leider runter während der Client noch verbunden war und Daten empfing.

Hat jemand vieleicht einen Tip für mich was ich besser machen könnte ?

corax2.05
28.02.10, 12:22
schau dir mal ishutdown an.
http://www.linux-tips-and-tricks.de/index.php/Netzwerktoolsrepository/View-category.html

HBtux
28.02.10, 13:36
verwende mal die folgende Zeile für Dein Script.

netstat -tn | awk '{print $5}' |grep "192.168.2.150:" | cut -d":" -f1 |head -n1

oder alternativ kannst Du auch für Dein Script die folgende Suchroutine verwenden......


#!/bin/bash

while true; do
# mehrere IP-Adressen angeben (wichtig immer mit Doppelpunkt am Ende und mit Pipe getrennt)
IPLISTE="192.168.2.150:|192.168.2.155:|192.168.2.156:"
# oder Jokerzeichen für das gesamte Netzwerk.
#IPLISTE="192.168.2.*:"

IP_ONLINE="`netstat -tn | awk '{print $5}' |egrep "${IPLISTE}" | cut -d":" -f1 |sort -u | wc -l`"
if [ "${IP_ONLINE}" = "0" ]; then
echo prüfe Shutdown
sleep 300
IP_ONLINE="`netstat -tn | awk '{print $5}' |egrep "${IPLISTE}" | cut -d":" -f1 |sort -u | wc -l`"
if [ "${IP_ONLINE}" = "0" ]; then
echo Poweroff
break
else
echo "es ist doch wieder ${IP_ONLINE} PC(s) angemeldet"
fi
else
echo "es sind noch ${IP_ONLINE} PC(s) verbunden"
fi
sleep 120
done
exit 0

Fancyfr0g
28.02.10, 16:18
Danke erstmal für die Antworten.

@HBtux

Werde mal das script mit deinem ersten Vorschlag modifizieren und testen.

HBtux
28.02.10, 23:48
Das zweite Script kannst Du auch fast 1:1 übernehmen.
Du musst nur die IPLISTE anpassen und statt den Echo-Befehlen Deine gewünschten Befehle einsetzen. (z.B. Poweroff....)

Für den ersten Test, kannst Du einfach mal die Echo-Ausgabe drinnen lassen, dann fährt der Server nicht aus Versehen runter.