Hallo zusammen,
vll gibt es ja hier jemanden der mir helfen kann
.
Ich nutze aktuell für meinen linux Fileserver folgendes Script, damit er sich automatisch ausschaltet.
#!/bin/sh
#
# (cc:by-sa) 2007 Marco Gabriel, http://www.marcogabriel.com/
#
# Powersaver.sh
###
# CONFIG
###
# Filename of the statusfile
STATUSFILE="/tmp/powersaver-status"
# which ip range should be checked?
# this example looks in "192.168.1.10 to 192.168.1.30"
# and "192.168.178.10 to 192.168.178.30"
RANGE="192.168.1.11-14"
# how many clients are always on (other servers, routers, etc)
MINCLIENTS=0
# shutdown after how many retries?
RETRIES=2
###
# END CONFIG
###
NUMCLIENTS=`nmap -sP $RANGE -oG - | grep "^Host" | wc -l`
if [ $NUMCLIENTS -le $MINCLIENTS ]; then
if [ ! -f "$STATUSFILE" ]; then
echo "COUNT=$RETRIES" > $STATUSFILE
fi
. $STATUSFILE
if [ $COUNT -le $MINCLIENTS ]; then
echo "Shutdown, my dear..."
shutdown -h now;
else
let COUNT=$COUNT-1
echo "COUNT=$COUNT" > $STATUSFILE
fi;
else
if [ -f "$STATUSFILE" ]; then
rm $STATUSFILE
fi
fi
Link hier
nun ist es aber so, dass kürzlich eine Apple TV im Netzwerk hinzugekommen ist. dieser ist immer nur auf standby. folglich erkennt nmap ihn auch - auf sämtlichen ports - als online, somit schaltet sich der server nie aus.
Wenn das Apple TV allerdings im Standby ist, kann er mit einem simplen "ping" nicht erkannt werden -> timeout.
Frage ist also mehr oder weniger, wie krieg ich den ping befehl in dieses script, sodass trotzdem der Count in der "powersaver-status" weiter ordentlich läuft.
Das Ersetzen von
durch ein simples
funktioniert natürlich hinten und vorne nicht.
In einem Linux Forum habe ich folgenden Ansatz auf die schnelle geschickt bekommen:
#!/bin/bash
# shutdown if clients are offline
# array of client ips
scanips=(
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.11
)
# loop to look for online clients
for ip in ${scanips[@]}; do
if ping -c 2 $ip; then
echo "$ip is up. Exit scan."
exit
else
echo "$ip is down. Continue scan."
fi
echo
done
# shutdown host
echo "Shutdown.
Allerdings wird hier nur einmal überprüft, man müsste also noch eine weitere Schleife um den Code bauen mit einem sleep befehl.
Leider habe ich von shell mal garkeine Ahnung, ausser den Code zu verstehen und ihn halbwegs auf meine Bedürfnisse anzupassen. Eigentlich würde ich gerne meinen jetzigen Code beibehalten.
Jemand da, der entsprechende Shell Programmierkentnisse hat und mir helfen kann?
Danke im vorraus
MfG,
muffi