FreeNAS: automatisch bei Nicht-Benutzung abschalten

Alle 15min das Script ausführen, mit dem geprüft wird, ob noch ein Rechner läuft, der das NAS brauchen könnte.

Wer wie ich sein NAS zuhause einsetzt, braucht es nicht die ganze Zeit aktiv. Leider bietet FreeNAS von Haus aus keine Funktion, das NAS herunter zu fahren, wenn es nicht gebraucht wird – also kein Rechner im Netzwerk online ist. Im FreeNAS-Forum sowie im PCGH-Extreme-Forum gibt es Anleitungen, wie man mit einem Cronjob regelmäßig (ich prüfe alle 15 Minuten) testen kann, ob noch ein Rechner auf einen Ping antwortet.

Problematischer ist das automatische Starten. Leider unterstützt FreeBSD (was als Basis für FreeNAS dient) in der Version 8.2 kein Wake-On-LAN mit der Onboard-Netzwerkkarte meines HP N36L. Dies lässt sich mit einem von Hand gepatchten FreeNAS umgehen (was eher kompliziert ist) oder mit einer anderen Netzwerk-Karte: meine Wahl fiel auf die Intel EXPI9301CT PCI-Express, welche laut verschiedene Berichten unterstützt werden soll und für 25,-Euro im Handel erhältlich ist. Das Script, welches ich ein wenig angepasst habe, stammt ursprünglich aus dem FreeNAS-Forum und ist hinter dem „mehr…“-Link zu finden. Danach muss es nur als Cronjob eingerichtet werden.

#!/bin/bash
HOST1=192.168.0.33 #IP des ersten PC
HOST2=192.168.0.35 #IP des zweiten PC
ip_range=192.168.0. #Netzadresse des eigenen Netzwerkes ohne den Hostanteil
ip=40 #checke Netz ab IP-Adresse 40

_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 ] ;
then _exit 1; # abbrechen, ein PC läuft
# Wenn kein PC an ist, gehe zu Checken ob PC's im IP-Bereich an sind
else

# Checken ob PC's im IP-Bereich an sind
  while [ $ip -le 45 ] #checke Netz bis Hostanteil 45
do
  ping -c 1 -i 1 $ip_range$ip #ping mit der zusammengesetzten IP-Adresse aus den o.a. Variablen "ip" und "i"
  if [ `ping -c 1 -i 1 $ip_range$ip | grep -wc 100.0%` -eq 0 ] #sobald einer der Hosts auf den ping antwortet, nicht herunterfahren
then _exit 1 #beenden mit exit 1 (kein shutdown)
fi
 ip=$(( $ip+1 )) #erhöhe Hostanteil immer um 1
done

_exit 2 # hat kein PC geantwortet, shutdown
fi

Das Script hat zwei Teile: der erste (bis Zeile 18) prüft, ob einer der fest eingetragenen Rechner an ist. Der Teil ab Zeile 22 checkt einen Bereich von IP-Adressen, in diesem Beispiel von 192.168.0.40 bis 192.168.0.45. Was man allgemein bedenken muss: auch Geräte wie iPhone oder iPad liefern einen Ping zurück und würden das NAS am herunterfahren hindern. Deswegen wird es in den meisten Netzwerken das Beste sein, nur auf einige bestimmte IP-Adressen zu prüfen und die Prüfung auf einen IP-Adressen-Bereich auszukommentieren.

Wichtig: der Aufruf des – in meinem Fall shutdowncheck.sh benannten – Scripts muss mit absoluter Pfadangabe erfolgen, sonst kann der Cronjob es nicht finden. In meinem Fall muss als Cronjob folgendes eingetragen werden:

sh /mnt/Daten/shutdowncheck.sh

Sobald die neue Netzwerkkarte geliefert wurde, werde ich entsprechend ein Update schreiben, bei dem es um FreeNAS und Wake-On-Lan (kurz WOL) geht – bis dahin wird das NAS von Hand eingeschaltet, wenn es gebraucht wird.

[amazon_link asins=’B01BNPT1EG,B015E60H20,B00T4NZBSA,B072X2YJ2N,B0749PJMV4,B013UBCHVU‘ template=’ProductCarousel‘ store=’techbloggernet-21′ marketplace=’DE‘ link_id=’4587c8b6-d935-11e7-b1c1-e9a7f7cd2c3a‘]