Shutdown-Script für Cluster-System

tux18

Member
Hallo zusammen,

ich erstelle aktuell ein Shutdown-Script, welches im Batterie-Betrieb und ab einer gewissen Restlaufzeit der USV das System herunterfahren soll.

Es handelt sich dabei um ein everRun-System, was auf XenServer basiert. Vielleicht ist einigen von euch das System ja geläufig.

Meine Bitte ist, vielleicht etwas zu viel verlangt, dass jemand von euch mal drüberschaut und mir bestätigen kann, dass dies vom logischen Ablauf her korrekt ist. Sicherlich muss das Skript vor dem Einsatz überprüft und getestet werden, das wird es auch. Ich will aber trotzdem sicherstellen, dass ich vorn vornherein keinen Denkfehler habe.

Der Ablauf ist wie folgt:

- Das Skript wird regelmässig aufgerufen und ruft via SNMP die entsprechenden Daten der USV ab (APC PCNS kann nicht unter dem System genutzt werden!)
- Sollte die USV auf Batterie-Betrieb laufen und die Karrenzkeit weniger als 15 Minuten betragen, werden alle geschützten und geschützten VMs heruntergefahren.
- Bevor der Poolmaster abgeschaltet wird, wird der Member-Server heruntergefahren.

Code:
#!/bin/bash

IFCONFIG=/sbin/ifconfig
EV=/var/everRun/current_everRun/bin/ev
XE=/opt/xensource/bin/xe
SNMPGET=/usr/bin/snmpget
SNMPOPTS="-Ov -Oq -v1 -r10 -t2 -c ${COMMUNITY} ${HOST}"

$MGMT_IF=xenbr0

OWN_IP=`${IFCONFIG} $MGMT_IF | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1`
MASTER_IP=`${EV} host-list host-role=Master | grep host-ip | awk '{ print $4 }'`
SLAVE_IP=`${EV} host-list host-role=Slave | grep host-ip | awk '{ print $4 }'`

if [ $OWN_IP  != $MASTER_IP ]
then
        echo "Das Skript darf nur auf dem Master-Server ausfuehrt werden!"
        exit
fi

# Standort
eMXLOCATION="RZ1"
EMAIL="wartung@email.de"
# USV Konfiguration
HOST="IP"
COMMUNITY="public"
OID_RUNTIME="1.3.6.1.4.1.318.1.1.1.2.2.3.0" # OID Restlaufzeit
OID_STATUS="1.3.6.1.4.1.318.1.1.1.4.1.1.0" # OID USV-Status, 2 = Online, 3 = Batterie
MINUTES_MIN=15

# Abfrage der OIDs
VALUE_RUNTIME=`${SNMPGET} ${SNMPOPTS} $OID_RUNTIME`
VALUE_STATUS=`${SNMPGET} ${SNMPOPTS} $OID_STATUS`

# Restlaufzeit nur in Minuten
OFS="$IFS"
IFS=":"
arr=( $VALUE_RUNTIME )
IFS="$OFS"
DAYS=${arr[0]}
HOURS=${arr[1]}
MINUTES=${arr[2]}
MINUTES_LEFT=$(($DAYS*24*60+$HOURS*60+$MINUTES))

if [ $MINUTES_LEFT -lt $MINUTES_MIN ] && [ $VALUE_STATUS = "3" ]
  then
    # E-Mailbenachrichtigung
    # echo "Marathon-System am Standort $eMXLOCATION wird heruntergefahren!" | mail -s "$eMXLOCATION: System wird heruntergefahren!" $EMAIL

    # Herunterfahren der PVMs
    $EV pvm-shutdown --all --waitFor
    # Herunterfahren ungeschuetzter PVMs
    $XE vm-shutdown --all --multiple

    # Poolmember herunterfahren
    $EV host-shutdown host-role=Slave --waitFor
    # Poolmaster herunterfahren
    $EV host-shutdown host-role=Master
fi
 
Zurück
Oben