Homeserver geht bei Nichtbenutzung in Standby

Da Strom in absehbarer Zukunft wohl nicht mehr billiger wird ist es umso wichtiger Strom zu sparen. Aus diesem Grund soll unser Homeserver automatisch in den Standby gehen wenn keine Clients mehr online sind. Damit der Server später wieder aufgeweckt werden ksnn müssen wir ihn erst einmal für Wake on Lan vorbereiten.

Dazu intallieren wir das Programm ethtool

 sudo apt-get install ethtool

und lesen anschließed die aktuellen Einstellungen aus mit folgendem Befehl. eth0 ist die verwendete Netzwerkkarte. Sofern man nur eine Netzwerkkarte eingebaut ist sollte dieser Wert stimmen.

 sudo ethtool eth0

Es erscheint eine Ausgabe, die in etwa so aussieht:

Interessant sind hier die Punkte “Supports Wake-on” und “Wake-on” bei beiden muss ein “g” dahinter stehen, oder in einer Reihe von Buchstaben vorkommen. Dies sorgt dafür dass der Rechner auf sogenannte Magic Packets reagiert und aufwacht.
Ist dies nicht der Fall müssen die Einstellungen geändert werden. Damit dies dauerhaft geschieht und nicht nach jedem Neustart wiederholt werden muss muss der entsprechende Befehl in die Datei /etc/rc.local eingefügt werden.
Diese Datei wird bei jedem Start des Betriebssystems ausgeführt. Dazu geben wir folgendes in die Konsole ein:

 sudo nano /etc/rc.local

 

in diese Datei geben wir folgende ein:

ethtool -s eth0 wol g

 

Das Ganze sieht dann etwa so aus:

Rechner neustarten und wie oben beschrieben mit

 sudo ethtool eth0

nachschauen ob das „g“ eingetragen ist.

Jetzt können wir das System so konfigurieren dass es in den Standby geht wenn es nicht gebraucht wird. Das verwendete Skript stammt von http://wiki.ubuntuusers.de/Skripte/Auto_OFF

Als Erstes wird unter /etc/cron.d eine neue Datei mit dem Namen checkshutdown erstellt.
Dazu in die Konsole folgendes eingeben:

sudo nano /etc/cron.d/checkshutdown

In den Texteditor folgendes eingeben:

# Auto shutdown
*/10 * * * * root /usr/local/sbin/checkshutdown.sh

Der soeben erstellte Cronjob ruft nun alle 10 Minuten ein Skript auf welches überprüft ob
– bestimmte Programme laufen
– bestimmte Dämonen aktiv sind
– noch Samba Verbindungen offen sind
– ob noch User eingeloggt sind
– und selbstverständlich ob noch Clientpcs eingeschaltet sind

Ist dies zweimal hintereinander nicht der Fall geht der Server in den Standby (also nach 20 Minuten).
Nun wird das eigentliche Skript erstellt mit:

sudo nano /usr/local/sbin/checkshutdown.sh
In Texteditor den kommt folgender Code:
#!/bin/bash
#
#set -x. /etc/autoshutdown.conf

logit()
{
logger -p local0.notice -s -- AutoShutdown: $*
}

IsOnline()
{
for i in $*; do
ping $i -c1
if [ "$?" == "0" ]; then
logit PC $i is still active, auto shutdown terminated
return 1
fi
done

return 0
}

IsRunning()
{
for i in $*; do
if [ `pgrep -c $i` -gt 0 ] ; then
logit $i still active, auto shutdown terminated
return 1
fi
done

return 0
}

IsDamonActive()
{
for i in $*; do
if [ `pgrep -c $i` -gt 1 ] ; then
logit $i still active, auto shutdown terminated
return 1
fi
done

return 0
}

IsBusy()
{
# Samba
if [ "x$SAMBANETWORK" != "x" ]; then
if [ `/usr/bin/smbstatus -b | grep $SAMBANETWORK | wc -l ` != "0" ]; then
logit samba connected, auto shutdown terminated
return 1
fi
fi

#damons that always have one process running
IsDamonActive $DAMONS
if [ "$?" == "1" ]; then
return 1
fi

#backuppc, wget, wsus, ....
IsRunning $APPLICATIONS
if [ "$?" == "1" ]; then
return 1
fi

# Read logged users
USERCOUNT=`who | wc -l`;
# No Shutdown if there are any users logged in
test $USERCOUNT -gt 0 && { logit some users still connected, auto shutdown terminated; return 1; }

IsOnline $CLIENTS
if [ "$?" == "1" ]; then
return 1
fi

return 0
}

COUNTFILE="/var/spool/shutdown_counter"
OFFFILE="/var/spool/shutdown_off"

# turns off the auto shutdown
if [ -e $OFFFILE ]; then
logit auto shutdown is turned off by existents of $OFFFILE
exit 0
fi

if [ "$AUTO_SHUTDOWN" = "true" ] || [ "$AUTO_SHUTDOWN" = "yes" ] ; then
IsBusy
if [ "$?" == "0" ]; then
# was it not busy already last time? Then shutdown.
if [ -e $COUNTFILE ]; then
# shutdown
rm -f $COUNTFILE
logit auto shutdown caused by cron
/sbin/halt
exit 0
else
# shut down next time
touch $COUNTFILE
logit marked for shutdown in next try
exit 0
fi
else
rm -f $COUNTFILE
#logit aborted
exit 0
fi
fi

logit malfunction
exit 1

Jetzt die Datei abspeichern und ausführbar machen mit:

sudo chmod a+x /usr/local/sbin/checkshutdown.sh

Jetzt fehlt nur noch die Konfigurationsatei, die wir mit folgendermassen erstellen:

sudo nano /etc/autoshutdown.conf

Der Code für die Konfigurationsdate ist folgender:

# Turn on auto shutdown
AUTO_SHUTDOWN=yes

# Damons that always have one process running, only if more that one process is active we prevent the shutdown
# The values are used with grep, so just a unique portion is sufficient
DAMONS=""

# Important applications that shall prevent the shutdown
# The values are used with grep, so just a unique portion is sufficient
APPLICATIONS=""

# Network IP range for checking any open samba connections
# The value is used with grep, so just a unique portion is sufficient
SAMBANETWORK=""

# Names or IP for computers that shall prevent the shutdown
# We ping these computers in the list to check whether they are active.
CLIENTS="sonne mond stern 192.168.1.10 192.168.1.11 192.168.1.12"

 

Wichtig ist der Punkt Clients hier müssen die Namen oder IP Adressen der Clients eingegeben werden die überprüft werden sollen. Sinnvollerweise sollte man allen seinen Clientcomputern eine feste IP Adresse zuweisen, damit der Check auch zuverlässig funktioniert. Wichtig ist dass die Clients Ping nicht blockieren, wie es in den Standardeinstellungen der Windows7 Firewall der Fall ist.

Möchte man den Server vorübergehend durchlaufen lassen kann das Skript deaktiviert werden indem man die Datei /var/spool/shutdown_off erzeugt, oder in der Konfigurationsdatei /etc/autoshutdown.conf den Punkt AUTO_SHUTDOWN=yes in AUTO_SHUTDOWN=no ändert.


Creative Commons Lizenzvertrag
Dieser Artikel ist lizenziert unter einer Creative Commons Namensnennung 3.0 Deutschland Lizenz.


 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.