Shutdown-Skript

Dieses Skript überprüft alle 10 Minuten wie viele Computer im Netzwerk online sind und fährt den Server, wenn kein dieser Rechner mehr online ist, das System nach einer bestimmten anpassbaren Zeit herunter (Standard: 30 Minuten).

Softwarevoraussetzungen: Cron | Texteditor
Schwierigkeitsgrad: Mittel
Ausgetestet mit folgenden Betriebssystemen: Ubuntu | Debian | teilweise auch andere Distributionen

Benötigte Pakete installieren

Zunächst muss nmap installiert werden:

user@server:~$ sudo apt-get install nmap

Einrichtung

Dazu /usr/local/bin/powersaver.sh mit Nano öffnen:

user@server:~$ sudo nano /usr/local/bin/powersaver.sh

…..und mit diesem Code füllen:

powersave.sh
#!/bin/bash
#
# (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,178.10-30"
 
# 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" | grep "up" | 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

Konfigurieren

Die Konfiguration am Anfang muss wie in den Kommentaren (#) angegeben an die eigenen Bedürfnisse angepasst werden:

###
# 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,178.10-30" # Hier die zu überprüfenden IPs angeben
 
# how many clients are always on (other servers, routers, etc)
MINCLIENTS=0                # falls in RANGE ein PC oder Router angegeben wurde, der immer an, hier die Anzahl eintragen
 
# shutdown after how many retries?
RETRIES=2                   # nach wie vielen missglückten Versuchen PCs zu erreichen, soll der Server heruntergefahren werden? (2=30min, 3=40min, usw.) 

In Cron eintragen und ausführbar machen

Ausfürbar machen:

user@server:~$ sudo chmod +x /usr/local/bin/powersaver.sh

In Cron alle 10 Minuten ausführen:

user@server:~$ sudo crontab -e     # die Crontab von Root öffnen

…und durch folgenden Inhalt erweitern:

*/10 * * * *      /usr/local/bin/powersaver.sh



chrisge 2016/02/18 22:42

Zur Bereitstellung eines bestmöglichen Angebots setzt diese Webseite Cookies ein. Durch die Nutzung dieser Webseite erklären Sie sich mit der Verwendung von Cookies einverstanden. Weitere Informationen