| die letzten Änderungen * Seitenstruktur * Stichwortsuche :


logo_puschin.jpg

Startseite

Knowledge base



Kontakt

Impressum

Knowledge base - Linux Systemüberwachung

Knowledge base

9 Benutzer online Druckversion




zurück



Linux Systemüberwachung
APC USV Shutdown-Script über serielle Schnittstelle

Dieses Programm überwacht eine APC USV über die serielle Schnittstelle. Bei einem Stromausfall wird bei 2 Minuten verbleibender Notstromzeit der Rechner mit einem init 0 runtergefahren.


#!/bin/bash

# ----------------------------------------------
#
#
# ssd_watch.sh
# ++++++++++++
#
# Version-History :
# 26.07.2006 - erstes getestetes Release, fp
#
#
# ----------------------------------------------

# Scharfer Schalter
REAL=1

# Konfigurationseinstellungen
DEVICE=/dev/ttyS0
ALARMCOUNTER=0
BUCHSTABE=Q
LOWBATTERYCODE=50
if [ -e /tmp/ssd_watch.debug ]; then
        LOGFILE=/var/log/ssd_watch.log
else
        LOGFILE=/dev/null
fi
MAXCOUNTER=3
SYSLOG_FACILITY=local0.info
VERBOSE_COUNTER=0

# Funktionen
function SYSLOG {
        echo "$1" | logger -p$SYSLOG_FACILITY -t ssd_watch
}

function BUCHSTABE_SENDEN {
        echo -n "$0 [`date`] : Sende Buchstabe $1 --> " >> $LOGFILE
        echo -n "$1" > $DEVICE
        read -t1 ANTWORT <&3
        ANTWORT=`echo $ANTWORT | awk '{ print substr($0,0,length($0)-1); }'`
        echo "$ANTWORT" >> $LOGFILE
        usleep 5000
}

# Das Device initialisieren
exec 3<$DEVICE
stty 2400 < $DEVICE 2>/dev/null || { SYSLOG "Uups, an $DEVICE antwortet keine USV."; exit 1; }
stty 1:0:80000cbb:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 < $DEVICE
SYSLOG "Daemon wird gestartet"

# Ich sende jetzt solange Y zu der USV bis sie mit "SM" antwortet
while true
do
        BUCHSTABE_SENDEN Y
        if [ "$ANTWORT" == "SM" ]; then
                break
        fi
        SYSLOG "Die USV konnte nicht in den Simple-Modus gesetzt werden, Antwort war [$ANTWORT]"
        sleep 5
done

# Ich sende ein "A"
BUCHSTABE_SENDEN A

# Endlos-Schleife
while true
do

        if [ -e /tmp/ssd_watch.debug ]; then
                LOGFILE=/var/log/ssd_watch.log
        else
                LOGFILE=/dev/null
        fi

        # Ich sende einen BUCHSTABEN an das richtige DEVICE
        echo -n "$BUCHSTABE" > $DEVICE

        # Ich warte auf die Antwort der USV
        read -t1 ANTWORT <&3

        # Timeout ?
        if [ "$?" == "1" ]; then
                SYSLOG "Read Timeout"
                sleep 5
                continue
        fi

        # Die Antwort hat am Ende ein Carriage Return
        ANTWORT=`echo $ANTWORT | awk '{ print substr($0,0,length($0)-1); }'`

        # Wenn ANTWORT == LOWBATTERYCODE, dann ALARMCOUNTER raisen
        if [ "$ANTWORT" == "$LOWBATTERYCODE" ]; then
                ((ALARMCOUNTER=$ALARMCOUNTER+1))
                SYSLOG "($ANTWORT) [raising ALARMCOUNTER to $ALARMCOUNTER]"
        else

                # Andernfalls noch die Spannung ausgeben, ok ?
                echo -n "f" > $DEVICE
                read -t1 VOLTAGE <&3
                VOLTAGE=`echo $VOLTAGE | awk '{ print substr($0,0,length($0)-1); }'`

                # Ergebnis entweder mit Ladezustand oder ohne
                if [ "$?" == "1" ]; then
                        echo -n "$0 [`date`] : ($ANTWORT) " >> $LOGFILE
                        echo "[ok]" >> $LOGFILE
                else
                        echo -n "$0 [`date`] : ($ANTWORT) " >> $LOGFILE
                        echo -n "[ok]" >> $LOGFILE
                        echo " --> $VOLTAGE%" >> $LOGFILE
                fi

                # Wenn VERBOSE_COUNTER=0, dann Ergebnis auch in Syslogger
                if [ "$VERBOSE_COUNTER" == "0" ]; then
                        SYSLOG "($ANTWORT) [ok] --> $VOLTAGE%"
                fi

                # Alarmcounter zuruecksetzen
                ALARMCOUNTER=0

                # Verbose_Counter (alle 24 Stunden eine Meldung)
                VERBOSE_COUNTER=$((VERBOSE_COUNTER+1))
                if [ "$VERBOSE_COUNTER" -gt 28800 ]; then
                        VERBOSE_COUNTER=0
                fi
        fi

        # Wenn ALARMCOUNTER GROESSER ALS MAXCOUNTER, DANN SYSTEM GEORDNET RUNTERFAHREN
        if [ "$ALARMCOUNTER" -gt "$MAXCOUNTER" ]; then
                #
                # System Shutdown
                #
                SYSLOG "++ SYSTEM SHUTDOWN wird eingeleitet mit init 0 ++"
                if [ "$REAL" == "1" ]; then
                        init 0
                fi
                exit
        fi

        sleep 5
done

SYSLOG "Daemon gestoppt"







zurück



Knowledge base wurde zuletzt bearbeitet am 12.07.13 durch Frank

www.puschin.de
login

<body bgcolor='#FFFFFF' link='#000000' vlink='#000000' alink='#000000' text='#000000'><font face='Verdana' size='2'><strong>www.puschin.de</strong><br>Die Webseite http://www.puschin.de bietet eine interessante Webseite zu vielen Themen aus dem Bereich Linux und Windows. Man findet hier Tipps und Tricks zu cms php apache postfix openxchange tomcat windows linux firewall <br><br><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=191'>Startseite</a><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=63'>Knowledge base</a><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=57'>Kontakt</a><font face='Verdana' size='2'><li><a href='cms.php?print=&aktion=thema_anzeigen&menue_id=9'>Impressum</a></body>