• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Linux Server herunterfahren wenn keine Clients mehr Online

Hallo :)

da ich im Netz nichts gefunden habe was meinen Ansprüchen genügt ich habe mir ein kleines Script zusammengestellt, das meinen Linux Server automatisch herunterfahren soll wenn keine Clients mehr Online sind. Dazu soll das Script per Cron alle 5 Minuten ausgeführt werden und die IPs, die in einer Konfigurationsdatei hinterlegt sind überprüfen.

Leider bekomme ich das mit dem Cronjob nicht hin. Vielleicht kann mir ja jemand von euch helfen. Das Script soll alle 5 Minuten ausgeführt werden.
Ich hänge das Script noch an falls da Interesse besteht. Manuell getestet funktioniert es einwandfrei.
Sorry für mein holpriges Englisch in den Kommentaren ;)

Distri ist Debian Squeeze

Code:
#!/bin/bash

#Clients Filename. Insert your Clients here. One line per Host without Empty Lines
CLIENTS_DATEI=auto-shutdown.ips

#Get Clients from File
CLIENTS=`cat $CLIENTS_DATEI`

#Setting the Counter for Online Clients to a defined Value
CLIENTS_ONLINE=0

#How many tries before Shutdown
VERSUCHE=2

#Status File
STATUSDATEI=power.status

#Making Status File and Filling with a defined Value if Empty
touch $STATUSDATEI
        test -s $STATUSDATEI
        if [ $? != 0 ]
                then echo 0 > $STATUSDATEI
        fi

#Getting how many Tries already Done from the Statusfile
BISHERIGE_VERSUCHE=`cat $STATUSDATEI`


for i in $CLIENTS
        do
                ping -c1 $i
                if test $? -eq 0
                        then
                                CLIENTS_ONLINE=`expr $CLIENTS_ONLINE + 1`
                fi
        done


        if [ $CLIENTS_ONLINE -eq 0 ]

                then
                        BISHERIGE_VERSUCHE=`expr $BISHERIGE_VERSUCHE + 1`
                        if [ $BISHERIGE_VERSUCHE -eq $VERSUCHE ]
                                then
                                        echo "System wird heruntergefahren"
                                        beep -f 1000 -l 500 -r 3
                                        rm $STATUSDATEI
                                        /sbin/halt
                                else
                                        echo $BISHERIGE_VERSUCHE > $STATUSDATEI

                        fi
                else
                        echo 0 > $STATUSDATEI
        fi

Gruß, Chris
 
Cron hat ein paar seltsame Eigenschaften.
Das Login, und damit die Settings von PATH, etc. werden nicht durchlaufen.
Je nach System wird das Skript auch mit "sh" statt "bash" ausgeführt. Siehe section C1 in
<ftp://ftp.cwru.edu/pub/bash/FAQ>

Versuch mal an den Anfang des Skripts, also Zeile 2 oder später, "exec 2>>/tmp/mycron.log" zu setzen.
Anschließend, nach einem Lauf, schau mal in /tmp/mycron.log nach, ob du da Fehlermeldungen findest.
Weiteres Debug:
Mit "set -u" im Skript kann man unbelegte Variable brauchbar finden.
Mit "set -x" kann man Debugging einschalten. Das würde dann auch in /tmp/mycron.log" landen.

Viele Grüße,
Haveaniceday
 
Oben