Hallo zusammen,
dies hier nur zur Vervollständigung. Ich poste hier 3 Skripe die ich in meinem Netzwerk nutze um meinen NAS Server automatisch an und wieder abzuschalten sobald Clients im, bzw. nicht mehr im Netz sind. WOL funktioniert bei mir ohne Probleme am Standardport des N40L. In diesem ist allerdings auch eine RemotAccess -Card verbaut. Das WOL Package wird dennoch an den eingebauten Standard-port gesendet.
Das Einschalten übernimmt bei mir eine FritzBox 7390. Auf dieser wird über das folgende skript (debug.cfg) eine alternative busybox geladen damit cronjobs verfügbar werden ohne dafür extra Freetz installieren zu müssen. Voraussetzung dafür ist ein USB-Speicher an der Fritzbox, auf der in einem Ordner /busybox die binary der busybox abgelegt wird (z.B. diese
hier ). Generell kann die Seite von
Radislav für weitere Erklärungen empfohlen werden, wenn z.B. kein USB Port zur Verfügung steht und die busybox binary beim neustart heruntergeladen werden muss.
Den Folgenden Code über telnet auf der Fritzbox mit dem Befehl "nvi /var/flash/debug.cfg" in die Datei debug.cfg eintragen:
Code:
#Copy the new Busybox from its HDD location to the tmp folder
cp -rf /var/media/ftp/busybox/busybox* /var/tmp/
# Copy the wakeup-script to the tmp folder
cp -rf /var/media/ftp/wakeupnas* /var/tmp/
# make the Script executable
chmod 777 /var/tmp/wakeupnas.sh
# make sure we're at the highest level
cd
# Create a Directory for crontabs
mkdir -p /var/spool/cron/crontabs
# go to directory ..
cd var/tmp
# Using the new busybox -> delete all crontabs
./busybox* crontab -r
# Using the new busybox -> create a crontab that will check the NAS every minute
echo "* * * * * sh /var/tmp/wakeupnas.sh" | ./busybox* crontab -
# Using the new busybox -> start a cronjob that will run in the background
./busybox* crond
Wie bereits angesprochen muss auf der FritzBox bzw. dem daran angeschlossenen Speichermedium folgendes Skript abgelegt sein.
Skriptname: wakeupnas.sh
Code:
#!/bin/bash
# Define the MAC-Adress of the Server
NAS_MAC=FF:FF:FF:FF:FF:FF # SET YOUR SERVER MAC-ADRESS HERE
# Define a variable to check for active devices (as a value of module landevices)
local checkactive=${1:-active}
# Define a variable to check for wlan devices (as a value of module landevices)
local checkwlan=${1:-wlan}
# Define a variables; and set to zero
local count=0
local count_active=0
local NAS_detected=0
# Get the maximum count of know devices
local maxcount=$(ctlmgr_ctl r landevice settings/landevice/count)
# While going through each known device ...
while [ $count -lt $maxcount ] ; do
# ... check if that device is active, and ...
local showactive=$(ctlmgr_ctl r landevice settings/landevice$count/$checkactive)
# ... check if that device is a wlan-device.
local showwlan=$(ctlmgr_ctl r landevice settings/landevice$count/$checkwlan)
# Now if the current device is active and is NOT a wlan-device, then ...
if [ $showactive -eq 1 ] && [ $showwlan -eq 0 ] ; then
# ... raise the counter by one and ...
: $((count_active++))
# ... chek if the current devce is the NAS-Server.
local mac=$(ctlmgr_ctl r landevice settings/landevice$count/mac)
# If current device is the NAS-Server, then ...
if [ $mac == $NAS_MAC ] ; then
# ... set a marker that we've found that the server is actually powered on and active.
NAS_detected=1
fi
fi
# Raise the while-loop-counter by one.
: $((count++))
# while loop done
done
# If we've found active lan-devices (not wlan-devices), then...
if [ $count_active -gt 0 ] ; then
# ... check if the NAS-Server was NOT detected. If that's true...
if [ $NAS_detected -eq 0 ] ; then
# ... send a WOL-Package to the NAS-Server to wake'm up.
/usr/bin/ether-wake -i eth0 $NAS_MAC
fi
fi
Zu guter letzt läuft das folgende Skript mit einem Cronjob auf dem NAS-Server und fragt in einem Abstand von 10 Minuten ab ob sich noch clients im Netzwerk befinden. Das Skrip liegt bei mir in einer separaten Data-Partition.
Skriptname: shutdown.sh
Code:
#!/bin/bash
# IP Adressen entsprechend anpassen
HOST1=192.168.178.20 # Client 1
HOST2=192.168.178.21 # Client 2
HOST3=192.168.178.22 # Client 3
HOST4=192.168.178.23 # Client 4
HOST5=192.168.178.24 # Client 5
HOST6=192.168.178.25 # Client 6
_exit () {
case $1 in
1) echo "Kein Shutdown - Mindestens einer der PCs ist eingeschaltet" ;;
2) echo "Kein PC online - Shutdown" ; shutdown -p now ;;
esac
exit $1;
}
# Checken ob PC's an sind
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1;
# Wenn kein PC an ist, 10 sec warten falls gerade einer Neu startet
else
echo "Kein PC online - Warte 90 Sekunden"
sleep 90
# noch mal PC's checken
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1;
# Wenn kein PC an ist, gehe zu exit case 2 (Shutdown)
else
_exit 2
fi
fi
Funktioniert bei mir alles perfekt. Sobald ein LAN-Client (keine WLAN-Clients) eingeschaltet wird, startet der Server automatisch und schaltet sich ab sobald keine Clients (LAN und WLAN) mehr im Netz erreichbar sind.
Die Einschränkung auf LAN-Clients beim einschalten habe ich getrofffen, da Smartphones sich üblicherweise auch im Ruhemodus kurz im WLAN anmelden um z.B. Mails abzurufen. Dies führte dazu das der Server unnötigerweise hoch und runtergefahren wurde.
Ich hoffe die Infos nützen irgendjemande irgendwann mal etwas.
Beste Grüße