header
header
header

Der richtige Datenaustausch

... warum nicht auf Standards setzen?

Wir setzen Antriebe in Bewegung!

... bestmöglich optimiert!

Dokumentation

... verständlich und übersichtlich.
Logo
Know-How
24.05.2020 - Batch script zum herunterfahren von virtuellen Box bei USV-Ausfall

Im Folgenden ist ein kurzes Batch-Script aufgeführt, dass eine USV zyklisch via SNMP abfragt und bei niedrigem Akkustand alle Virtuelle Boxen herunterfährt

#!/bin/bash

####################################################################
#     
#     Script um Server über USV SNMP-Protokoll runterzufahren
#
#     Autor:     D.Schunk
#     Datum:      2018.11.10
#
####################################################################

# IP-Adresse der USV
IpAdress="192.168.13.60"

# Timoeut wenn nicht all VMS runterfahren
timeoutVms=120     # sek

#Benutzer, mit dem virtuelle boxen gestartet wurden
user="server01"

#XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

echo "-------------------------------------------------------------" >> UsvScript.log
echo "$(date "+%Y-%m-%d %T"): script gestartet" >> UsvScript.log
echo "$(date "+%Y-%m-%d %T"): Benutzer: $(whoami)  X  VM-User: $user" >> UsvScript.log


#Init
state=0
runS=true
Log=true


while ($runS)
do

     case $state in

          0) #Init
               zaehler=0
               state=10
          
          ;;

          10) #Abfrage
               #upsBatteryStatus
               # unknown(1)
                   # batteryNormal(2) - UP
                   # battteryLow(3)
                   # batteryDepleted(4)

               statusUsv=$(snmpwalk -v1 -c public $IpAdress iso.3.6.1.2.1.33.1.2.1 -O v 2>&1) # Trick stdout und stderr ausgebend

               #echo "Status USV: $statusUsv\n"
          
               case $statusUsv in
                    "INTEGER: 2")     # batteryNormal(2) - UP
                         if [ $Log ]
                         then
                              echo "$(date "+%Y-%m-%d %T"): Batterizustand OK: $statusUsv" >> UsvScript.log
                              #echo "$(date "+%Y-%m-%d %T"): Batterizustand OK: $statusUsv"
                              Log=""
                         fi                         
                         state=20
                    ;;

                    "INTEGER: 3"|"INTEGER: 4") # battteryLow(3)
                         echo "$(date "+%Y-%m-%d %T"): Batteriezustand gering !!!: $statusUsv" >> UsvScript.log
                         #echo "$(date "+%Y-%m-%d %T"): Batteriezustand gering !!!: $statusUsv"
                         Log=true
                         state=100
                    ;;
                    
                    Timeout*)
                         echo "$(date "+%Y-%m-%d %T"): Keine Antwort von USV: $statusUsv" >> UsvScript.log
                         #echo "$(date "+%Y-%m-%d %T"): Keine Antwort von USV: $statusUsv"
                         Log=true
                         sleep 120
                         state=20
                         ;;
               
                    *)     # Unbekannte Antwort
                         echo "$(date "+%Y-%m-%d %T"): Unbekannte Antwort: $statusUsv" >> UsvScript.log
                         #echo "$(date "+%Y-%m-%d %T"): Unbekannte Antwort: $statusUsv"
                         Log=true
                         sleep 120
                         state=20
                    ;;
               esac
               
               ;;

          20) #Wartezeit
               sleep 15
               state=10
               ;;

          100) #Laufende VMS ermitteln
               vms=`su $user -c "VBoxManage list runningvms"`

               echo "$(date "+%Y-%m-%d %T"): Running VMS: $vms" >> UsvScript.log
               #echo "$(date "+%Y-%m-%d %T"): Running VMS: $vms"


               state=110
               ;;

          110) #VMs beenden - Prüfe ob noch welche laufen
               vms=`su $user -c "VBoxManage list runningvms"`

               for vm in $vms
               do
                    vmOZ=${vm%\"}          # Anführungzeichen entfernen
                    vmOZ=${vmOZ#\"}          # Anführungzeichen entfernen

                    echo "$(date "+%Y-%m-%d %T"): Beende VM $vmOZ" >> UsvScript.log

          
                    #sudo -u $user VBoxManage controlvm $vmOZ acpipowerbutton
                    su $user -c "VBoxManage controlvm $vmOZ acpipowerbutton"
               done

               echo "$(date "+%Y-%m-%d %T"): Restzeit: $(($timeoutVms-$zaehler))s" >> UsvScript.log
               #echo "$(date "+%Y-%m-%d %T"): Restzeit: $(($timeoutVms-$zaehler))s"

               if [ -z "$vms" ]
               then
                    echo "$(date "+%Y-%m-%d %T"): Alle VMs beendet" >> UsvScript.log
                    state=200
               else
                    if [ $zaehler -ge $timeoutVms ]
                    then
                         echo "$(date "+%Y-%m-%d %T"): TimeOut (nicht alle VMs runtergefahren)" >> UsvScript.log
                         state=200
                    else
                         zaehler=$(($zaehler+10))
                         state=120
                    fi
               fi
               ;;

          120) #Wartezeit
               sleep 10
               state=110
               ;;
          
          200) #Rechner runterfahren
               echo "$(date "+%Y-%m-%d %T"): shutdown" >> UsvScript.log
               #echo "$(date "+%Y-%m-%d %T"): shutdown"
               shutdown now
               runS=false
               ;;

     esac

done


exit 0



zurück zur Übersicht...
Kontaktieren Sie uns...
Disp

Schunk-E-Techs

Info@Schunk-E-Techs.de

Kontaktformular: hier