Dieser Artikel basiert im Wesentlichen auf dem Skript Auto Off von Ubuntuusers und wurde angepasst um unseren Anforderungen zu entsprechen.

Es handelt sich um ein Skript welches in regelmässigen Abständen überprüft ob einer der Clients angeschaltet ist. Ist dies nicht der Fall wird der Server in Standby geschickt.

Cron Job erstellen

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 sich nun öffnenden Texteditor den folgenden Code eintragen und anschliessend speichern

 

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

 

Skript
Der soeben erstellte Cronjob ruft nun alle 10 Minuten ein Skript auf welches überprüft ob einer der Clients ansprechbar ist. Ist dies zweimal hintereinander nicht der Fall geht der Server in den Standby (also nach 20 Minuten)
Wir geben folgendes in die Konsole ein:
sudo gedit /usr/local/sbin/checkshutdown.sh
In den Texteditor 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

        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
        		/usr/sbin/pm-suspend
		        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
Das Ganze nun abspeichern. Anschliessend das Ganze noch ausführbar machen mit:
sudo chmod a+x /usr/local/sbin/checkshutdown.sh

 

Die Konfigurationsdatei

Wir erstellen nun noch die Konfigurationsdatei mit:
sudo nano /etc/autoshutdown.conf
In diese Datei kommt folgender Code:
# 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.
Die Überprüfung erfolgt durch einen Ping, welcher allerdings von Windows 7 standardmässig blockiert wird. In diesem Fall muss die die Windowsfirewall entsprechend umkonfiguriert werden
Dazu bitte in das Suchfeld im Startmenü
Windows-Firewall mit erweiterter Sicherheit
eingeben, dann unter Eingehende Regeln bei dem Punkt Datei- und Druckerfreigabe (Echoanforderung – ICMPv4 eingehend) bei Aktiviert ein Häckchen setzten. Aktion muss auf zulassen gesetzt sein.
Nun geht der Homeserver 20 Minuten nachdem der letzte Client ausgeschaltet wurde in den Standby.

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

Comments are closed.