Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!

ESXi 4 - Shutdown des Hosts

Moderatoren: Dayworker, irix

Member
Beiträge: 18
Registriert: 07.11.2008, 21:22

ESXi 4 - Shutdown des Hosts

Beitragvon psyke01 » 01.02.2010, 21:45

Hallo alle zusammen,

ich versuche nun gerade einen sauberen Shutdown des ESXi Hosts im Falles eines Stromausfalles zu konfigurieren.
USV kann nur über serielle Schnittstelle kommunizieren, und leider kann ein ESXi Server keine serielle Schnittstelle des Hosts auf die VM bringen.
Kommunikation zwischen USV erfolgt nun über einen eigenen physikalischen ManagementServer (hier ist zB. auch vCenter installiert).

Nun kann ich im Falle eines Stromausfalles am phsikalischen Server ein Script ausführen, dass den ESXi Host automatisch herunterfährt.

Welche Mittel stehen mir nun zur Verfügung, dass ich ein .bat Script schreiben kann, dass sich am ESX Host einloggt und anschließend den Shutdown Befehl absetzt?

Danke!

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 01.02.2010, 22:20

Also mit vmrun aus dem VIX sowie RCLI oder dem VI Toolkit gibts ja nun 456543 Moeglichkeiten einen ESX(i) fernzusteuern. Schreib also ein Powershell oder Perl der aber eine *,bat welche das herunterfahren der VMs triggert. Ob dann auch was fuer den abschliessenden Shutdown gibt must du mal schauen.

Obiges gilt auch fuer den ESXi sofern es nicht ein FreeESXI ist welcher nur eine ReadOnly API hat.

Gruss
Joerg

Member
Beiträge: 35
Registriert: 05.08.2007, 08:11
Wohnort: Bönen

Beitragvon Bomboletti » 15.02.2010, 11:12

Hallo zusammen,
ich habe gerade dasselbe Problem. Ich muss unsere gesamte IT Umgebung sauber herunterfahren. Die VMs über die Remote Schnittstellen kein Problem. Storage etc. auch bereits gelöst.
Aber wie fahre ich Remote den ESX 4i herunter? Dafür habe ich noch nix gefunden?!
Hat da jemand eine Lösung?

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 15.02.2010, 11:31

im VI Remote CLI Package ist ein "hstops.pl" enthalten. Damit kannst du den Host in den Maintanence Mode versetzen und anschliessen herunterfahren.

Gruss
Joerg

Member
Beiträge: 35
Registriert: 05.08.2007, 08:11
Wohnort: Bönen

Beitragvon Bomboletti » 15.02.2010, 13:12

vielen dank für die schnelle antwort.
hat jemand mit dem script schon einmal etwas gearbeitet?
wenn ich mit dem script eine funktion aufrfen möchte bekomme ich immer die meldung das benutzername oder kennwort falsch ist. es ist aber bei allen esx, mit welchen ich es jetzt probiert habe richtig, den mit vi client kann ich mich anmelden.

Befehl:
C:\Program Files\VMware\VMware vSphere CLI\bin>hostops.pl --host 172.17.12.46 --operation enter_maintenance

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

VMs und ESX4.1 per Skript herunterfahren

Beitragvon ltw001 » 07.08.2010, 20:13

Hallo zusammen,
ich teste gerade den ESX4.1 und bin nicht wirklich firm mit der Materie.
Habe jetzt versucht ein Skript für den Shutdown zu schreiben, dass ich über eine batch Datei von einem anderen PC aus aufrufen kann. Das funktioniert soweit, allerdings fahren die VMs manchmal nicht sauber runter (obwohl diese auf automatisch herunterfahren stehen). Deswegen würde ich das Runterfahren der VMs ebenfalls in das Skript integrieren, kenne mich aber leider nicht damit aus und habs selbst nach langer Suche in diversen Foren nicht hinbekommen.

Deswegen meine Bitte:
Wäre jemand so nett und würde mir ein kleines Skript schreiben, dass
a) alle VMs, die ich über vmware-cmd -l aufgelistet bekomme, herunterfärt und
b) danach den ESX-host runterfährt.

Das Skript soll dann direkt auf dem ESX-host liegen und per Plink gestartet werden.
Mit dem RemoteCLI komm ich nämlich gar nicht klar.

Schon mal vielen herzlichen Dank!

Gruß
Tobias

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 07.08.2010, 22:13

Also wenn du schon weist das du vmware-cmd verwenden willst wo genau liegt das Problem?

Code: Alles auswählen

for vm in `vmware-cmd -l`;do vmware-cmd $vm stop soft ;done
sleep 360
shutdown -h now


Geht natuerlich nur wenn die VMware Tools im Gast aktiv sind und die VM nicht anderer Meinung ist. Ansonnsten muss man eine Fehlerkontrolle einbauen welche nach dem sleep nochmal nachguckt und ein "stop hard" macht.

Und per RCLI ist es doch das gleiche in Gruen.

Gruss
Joerg

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 07.08.2010, 22:43

Vielen Dank für die schnelle Antwort Joerg!

Dass es nicht sooo kompliziert ist, hab ich vermutet, aber da ich mich mit Skriptsprache überhaupt nicht auskenne, bin ich einfach nicht weitergekommen.

Habe aber noch ein kleines Problem:
Scheinbar zerlegt er mir die Namen der VMs, weil diese Leerzeichen enthalten.
Die einzelnen Teile der Namen ergeben natürlich nicht die *.vmx und somit generiert er jede Menge Fehlermeldungen, dass er die VM nicht finden kann.

Was muss ich denn anpassen, damit er die Namen "ganz" lässt oder die Leerzeichen entfernt?

Vielen Dank nochmal!!!

King of the Hill
Beiträge: 13659
Registriert: 01.10.2008, 12:54
Wohnort: laut USV-Log am Ende der Welt...

Beitragvon Dayworker » 07.08.2010, 22:51

Einfach den VM-Namen in Gänsefüsse setzen oder im VM-Namen schon bei deren Erstellung auf Leerzeichen verzichten.

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 07.08.2010, 23:07

Ja, das habe ich auch schon probiert. Aber was genau ist bei diesem Skript der VM-Name? Dieser wird ja wiederum über den Befehl vmware-cmd -l abgefragt. Nur wie setze ich diesen dann in Anführungszeichen?

Code: Alles auswählen

for "vm" in `vmware-cmd -l`;do vmware-cmd $vm stop soft ;done


oder

Code: Alles auswählen

for vm in `vmware-cmd -l`;do vmware-cmd "$vm" stop soft ;done


funktionieren leider nicht.
Wo genau müssen die Anführungszeichen denn hin? (Sorry, für meine Unwissenheit)

Danke nochmal!

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 07.08.2010, 23:14

Dayworker hat es dir ja schon gesagt was zutun ist.

Generell gilt zusagen das man Zeichen welche eine eigene Bedeutung in der Umgebung haben Escapen muss. Welches das entsprechende Escape Zeichen ist haengt von der Sprache bzw. des Interpretors ab.

Kein Parser auf dem Planeten (zumind. die welche ich Kenne) kann mit Leerzeichen in den Argumenten umgehen, weil Leerzeichen verwenden um die Argumente zutrennen. Aus diesm Grund verwendet man hier Quotes.

Code: Alles auswählen

programm arg1 arg2

bzw.

Code: Alles auswählen

programm "arg 1" "arg 2"


Gruss
Joerg

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 07.08.2010, 23:23

Das ist ja vllt. ganz nett gemeint :grin: aber wollt ihr hier ein Quiz mit mir machen? :(

Geht das denn überhaupt mit dem von dir geposteten Skript, Joerg?
Wenn ja, könntest du mir BITTE sagen, wo die Anführungszeichen hin müssen?
(ist wirklich völliges Neuland für mich...bin Windoof-Nutzer und bastel jetzt schon ewig an dieser Kleinigkeit rum..echt deprimierend)

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 07.08.2010, 23:28

Du hast das schon richtig gemacht. Zeig mal die Ausgabe von vmware-cmd -l mit der VM welche Probleme macht.

Gruss
Joerg

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 07.08.2010, 23:36

Ja, aber was ist denn dann richtig? Weil beide von mir probierten Möglichkeiten, funktionieren nicht:

Mach ich es so:

Code: Alles auswählen

for "vm" in `vmware-cmd -l`;do vmware-cmd $vm stop soft ;done

bekomme ich "VM is not a valid identifier." als Feedback.

Mache ich es so:

Code: Alles auswählen

for vm in `vmware-cmd -l`;do vmware-cmd "$vm" stop soft ;done

heißt es:
no virtual machine found with name Windows
no virtual machine found with name XP
no virtual machine found with name Professional

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 07.08.2010, 23:40

Ich wollte wissen was genau vmware-cmd -l ausgibt. Aber ich nehme mal an die heist "Windows XP Professional.vmx" oder?

Gruss
Joerg

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 07.08.2010, 23:41

Ja, genau "Windows XP Professional.vmx"

vmware-cmd -l gibt die Liste der VMs korrekt aus mit datastore-pfad usw. aber eben mit Leerzeichen im Namen.

Was kann ich da machen?

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 07.08.2010, 23:48

Ich schau morgen mal ob mir was einfaellt.

Gruss
Joerg

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 07.08.2010, 23:50

Kann man nicht irgendwie die Leerzeichen entfernen?

Vielen Dank schon mal!

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 08.08.2010, 00:01

ltw001 hat geschrieben:Kann man nicht irgendwie die Leerzeichen entfernen?


Unser eins aendert dann den Label der VM mit dem vSphere Client und fuehrt dann ein Stroage vMotion durch damit alle Pfade und Dateinamen die Aenderung wiederspiegeln.

Kann oder will man das so nicht machen stoppt man die VM, macht ein De-Register und aendert mit dem Texteditor die VMX, deren Inhalt und die VMDKs. Am Ende das Verzeichnis umbenennen und die VM wieder registrieren und dann starten.

Gruss
Joerg

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 08.08.2010, 00:13

Das klingt nicht mal schlecht.
Kann ich das auch bewirken, indem ich den die VM in einen anderen Datastore migriere? Oder macht Storage vMotion auch nichts anderes?

Habe übrigens gerade die Lösung gefunden, um die Leerzeichen zu entfernen:

Code: Alles auswählen

OLD_IFS=$IFS
IFS="
"
for vm in $(vmware-cmd -l);do vmware-cmd "$vm" stop soft;done
IFS=$OLD_IFS


Aber Danke nochmal für die mitternächtliche Hilfe!

Member
Beiträge: 10
Registriert: 13.09.2009, 00:17

Beitragvon ltw001 » 08.08.2010, 10:38

Soweit so gut. Jetzt kann ich per Skript die VMs sauber runterfahren und anschließend den Host.
Jetzt habe ich allerdings noch ein Problem:
Das Shutdown Skript führ ich momentan auf einer VM aus.
Jetzt ist es aber so, dass das Skript ja auch DIESE VM herunterfährt.
Folglich kann der Host-Shutdown Befehl nicht mehr ausgeführt werden.

Wie kann ich das umgehen?
Kann ich eine VM vom Shutdown-Prozess ausschließen?

oder besser: Kann ich es erreichen, dass das *.sh Skript auf dem ESX-Host weiter ausgeführt wird, auch wenn die batch-Datei mit der ich das *.sh Skript auf dem Host starte geschlossen wird?

King of the Hill
Beiträge: 13066
Registriert: 02.08.2008, 15:06
Wohnort: Hannover/Wuerzburg
Kontaktdaten:

Beitragvon irix » 08.08.2010, 11:03

mittels " | grep -v DasNichtBegriff" kannst du aus der Ausgabe von vmware-cmd -l das gewuenschte herausfiltern.

Man kann Programme mittels "&" am Ende in den Hintergrund schieben allerdings weis ich nicht ob es nicht beim urspruenglichen Problem bleibt. Wenn du dir mal einen Prozesstree anschaust wirst du sehen das alle Scripte an deiner Loginshell haengen und wenn die beendet wird sterben im Normallfall auch die Prozesse hinten drin.

Im Reallife arbeitet man deshalb mit "screen". Aber ich wuesste jetzt nicht wie man das einbauen kann.

Mein Ansatzzweck waere allerdings eine vMA zu benutzen bzw. das ganze per RemoteCLI von der Windows VM zumachen. Die kann sich ja als letztes herunterfahren.

Gruss
Joerg


Zurück zu „ESXi 4“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste