Seite 1 von 1

Shutdown Script

Verfasst: 11.07.2013, 12:50
von Alveran
Hallo,

wir benutzen momentan folgendes Shutdown Script:
---------------------------------------------------------------------------------
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/vmware/vma/lib64:/opt/vmware/vma/lib
export LD_LIBRARY_PATH
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
hosts=(IP des Hosts)
ups_vm="VMware MA5"
for host in ${hosts[@]}; do
echo $host
source /opt/vmware/vma/bin/vifptarget -s $host
for i in `vmware-cmd -l --username root --password unserPasswort`; do
if [ `vmware-cmd $i getstate | egrep -c "on"` -eq 1 ]; then
echo $i
if [ `echo $i | egrep -c $ups_vm` -eq 1 ]; then
echo "Skip shut down of VMA"
else
echo "Shutting down $i"
vmware-cmd "$i" stop soft
fi
fi
done
source /opt/vmware/vma/bin/vifptarget -c
done
-------------------------------------------------------------------------------

Das funktioniert so weit gut. Nun sind allerdings die Anforderungen anders.
Es sollen erst die Terminalserver herunter gefahren werden dann die Aplikationsserver und dann die Datenbankserver.
Ich bin so weit überfragt da ich kein Pearl beherrsche.

Ich denke der Ansatz ist folgender:
unser Terminalserver beginnen alle mit st****** , Appliaktionsserver mit sa****** und Datenbank mit sd*********
Leihen haft gesprochen eine Schleife bauen die nach diesen Bedingungen sucht.

Bin für jede Hilfe Dankbar.

Verfasst: 11.07.2013, 22:07
von Kampfwurst
Hallo

Kennst du dieses Script?
https://github.com/sixdimensionalarray/ ... sxidown.sh

Damit sollte es klappen. Es fährt die Server so herunter wie sie in " SERVERIDS="" " eingetragen wurde. So fahre ich alle anderen VMs und am Schluss die VM die den DomainController macht herunter.

Verfasst: 15.07.2013, 15:08
von Alveran
Hallo,

besten Dank. Leider ist das statisch. Er muß vor dem Shutdown automatisch schauen welche Terminalserver laufen und diese als erstes herunter fahren.

Verfasst: 16.07.2013, 09:03
von Klaus_Urban
Hallo

@Alveran
>Er muß vor dem Shutdown automatisch schauen welche Terminalserver laufen und >diese als erstes herunter fahren

warum? Trage doch einfach alle in der richtigen Reihenfolge ein.
Wenn eine VM nicht eingeschaltet ist, wird sie auch nicht heruntergefahren. ;-)


#!/bin/sh

VM_NAME="ST-Server.vmx"
VM_ID=`/bin/vim-cmd vmsvc/getallvms | grep ${VM_NAME} | awk '{print $1}'`
/bin/vim-cmd vmsvc/power.shutdown ${VM_ID} > /dev/null 2>&1

VM_NAME="SA-Server.vmx"
VM_ID=`/bin/vim-cmd vmsvc/getallvms | grep ${VM_NAME} | awk '{print $1}'`
/bin/vim-cmd vmsvc/power.shutdown ${VM_ID} > /dev/null 2>&1

VM_NAME="SD-Server.vmx"
VM_ID=`/bin/vim-cmd vmsvc/getallvms | grep ${VM_NAME} | awk '{print $1}'`
/bin/vim-cmd vmsvc/power.shutdown ${VM_ID} > /dev/null 2>&1

sleep 120
/bin/halt


Klaus

Verfasst: 16.07.2013, 11:55
von monster900
@Alveran
Habt Ihr einen HA-Cluster im Einsatz?
Dann wird das Ganze noch etwas komplexer. Man kann dann ja nie sicher sein, auf welchem Host die entsprechende VM jetzt wirklich läuft.
Im Prinzip müsstest Du vorab die Shutdown-Reihenfolge der Maschinen und die entsprechenden Hostserver definieren. Anschließend müßte dann das Shutdownscript prüfen auf welchen Server die VM läuft und diese dann herunterfahren...

Damit ärgere ich mich immer noch rum.

Gruß
Dirk

Verfasst: 17.07.2013, 13:59
von Alveran
Hallo,

ja es ist ein HA Cluster mit sehr vielen Maschinen. Es ist also nicht möglich irgendetwas fest einzustellen. Weiterhin kommen ständig neue VMs hinzu. Das script muß also automatisch festellen was daruf läuft und diese in der Reihenfolge Terminal Datenbank Rest herunterfahren.

Verfasst: 17.07.2013, 14:40
von andiwe
Spricht irgendwas gegen Powershell?

Code: Alles auswählen

Get-VM | Where { $_.PowerState -eq "PoweredOn" -and $_.Notes -match "Terminalserver" } | Shutdown-VMGuest


bzw. $_.Name -like "st*"

http://www.virtu-al.net/2010/01/06/powercli-shutdown-your-virtual-infrastructure/

Verfasst: 17.07.2013, 15:36
von Alveran
Gute Idee. Ich Probier mal.

Verfasst: 18.07.2013, 09:22
von Alveran
Es funktioniert so sehr einfach. Spitze. Es gibt aber noch ein kleines Problem.

PowerCLI C:\Programme\VMware\Infrastructure\vSphere PowerCLI> Get-VM | Where { $
_.PowerState -eq "PoweredOn" -and $_.Name -like "st*" }

Erstmal zum testen. Bekomme ich alle Server doppelt angezeigt.

Verfasst: 18.07.2013, 09:32
von andiwe
Du hast dich bestimmt 2 mal mit dem Virtual Center verbunden :D ;)

Code: Alles auswählen

Disconnect-VIServer *


Code: Alles auswählen

Connect-VIServer -Server FQDN

Verfasst: 18.07.2013, 09:53
von Alveran
Danke. War zu einfach. :) :) :) :)