Shutdown eines ESXi-Servers mittels einer APC-USV und einem Windows-Host

Lange habe ich gegrübelt, wie man wohl ohne aufwendiges “Gepfriemel” einen ESXi-Host (von VMware) bei einem Stromausfall, der länger dauert, korrekt herunterfahren könnte. Im Netz bzw. auf den VMware-Supportseiten findet man dazu alle möglichen Hinweise – von der Installation eines eigenen Plugins in den ESXi-Host (very complicated) bis hin zur Verwendung einer speziellen (und nicht gerade günstigen) Netzwerk-Verwaltungsschnittstellenkarte von APC selbst. Dabei ist die Lösung so einfach:

Man schleift die USB-Schnittstelle des ESXi-Hostservers, an der die USV angeschlossen ist, zu irgendeiner virtuellen Windows-Maschine (die auf ebendiesem ESXi-Host läuft) durch (Hardware konfigurieren, hinzufügen: USB-Controller, OK, Hardware hinufügen: USB-Gerät, die USV auswählen, OK) und installiert auf dieser virtuellen Windows-Maschine die kostenlose Powerchute-Version von APC (die jeder USV beiliegt bzw. von der APC-Homepage heruntergeladen werden kann).
Zur Sicherheit habe ich dem “APC PBE Agent”-Dienst noch ein lokales Administrator-Konto zugewiesen, damit er ungehindert agieren kann.

Danach wird´s ein bisschen komplizierter – allerdings nicht sehr:
Die SSH-Schnittstelle am ESXi-Host freischalten (Konfiguration vom ESXi-Host, Software, Sicherheitsprofil: Eigenschaften, dann den SSH-Dienst auswählen, Optionen, entweder auf “automatisch starten…” oder “mit Host starten”) und danach natürlich auch starten.

Dann in der Windows-Client-Maschine das Programm “putty” sowie “plink.exe” (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) z.B. in den Ordner c:\putty herunterladen und (zumindestens) einmal eine SSH-Verbindung + Login zum ESXi-Host aufbauen (SSH-Key wird automatisch installiert), diese Verbindung in Putty speichern und den dabei vergebenen NAMEN merken.

Jetzt im CMDFILES-Ordner der APC Powerchute-Installation (üblicherweise c:\program files (x86)\APC\Power Chute Business Edition\agent\cmdfiles) eine eigene CMD-Datei anlegen (zB shutserver.cmd), die folgenden Befehl enthält:

@START “” “c:\putty\plink.exe” ESXI -l USERNAME -pw PASSWORT “/sbin/shutdown.sh && /sbin/poweroff”

ESXI = der Name der Verbindungssession, die in Putty gespeichert wurde
USERNAME / PASSWORT = Username und Password des Root-Accounts des ESXi-Hosts

Jetzt bleiben nur mehr zwei Tasks bis zum erfolgreichen Shutdown: In der Powerchute-Konfiguration die soeben angelegte “shutserver.cmd”-Datei im Menu “Shutdown” unter “Shutdown settings” (no na 😉 anwählen und (falls nicht sowieso bereits geschehen) am ESXi-Host die entsprechenden Aktionen zum Herunterfahren der virtuellen Maschinen konfigurieren (ESXi-Konfiguration, VM starten/herunterfahren, Eigenschaften) – also entweder “Herunterfahren” oder “Anhalten”.

Ich habe das Script getestet, es hat einwandfrei geklappt – ein vorheriger Wechsel des ESXi-Hosts in den Wartungsmodus war nicht nötig.

Hier der Vollständigkeit halber (mit Dank) noch der Link zu dem Originalartikel, der mich auf die richtige Spur gebracht hat:

https://community.spiceworks.com/how_to/55064-how-to-gracefully-shut-down-vsphere-5-x-esxi-free-using-an-eaton-ups-with-ipm-and-the-command-line

Den zweiten wichtigen Artikel, in dem ich darüber aufgeklärt wurde, dass man die Variablen für das @START-Kommando des APC Powerchute-Scripts (also zB @START “” “c:\putty\plink.exe” variable1 variable2 etc.) außerhalb der Anführungszeichen plazieren muß, werde ich nachreichen (wenn ich ihn wiedergefunden habe).

Ein weiterer interessanter Artikel, der sich mit dieser Thematik beschäftigt: https://www.binarus.de/articles/apc-usv-network/apc-usv-network.shtml

4 thoughts on “Shutdown eines ESXi-Servers mittels einer APC-USV und einem Windows-Host”

  1. Danke für diese Anleitung. Unter Esxi 6.5 scheint die Möglichkeit des abschaltens der VMs mit dem Host nicht mehr gegeben zu sein. Man könnte in dem file ja auch die vm per shutdown runterfahren, aber dann nicht mehr den Esxi… oder geht das zeitverzögert? Also ist es möglich erst den Befehl power off an den Esxi zu senden mit Zeitangabe?

    1. Ich habe einen Test-ESXi6.5 aufgesetzt und werde das einmal checken. Ich konnte leider auch noch nicht überprüfen, ob das einfache Shutdown-Kommando für den ESXi die VMs (natürlich nur wenn die Standard-Einstellungen für das Herunterfahren korrekt gesetzt wurden) korrekt anhält bzw. herunterfährt, von der Web-Konsole aus ist das ja so.

  2. Hallo nochmal,
    ich habe das zwischenzeitlich selbst getestet: funktioniert einwandfrei. Im Esxi 6.5 ist es etwas unklar, dass die VM’s auch in Reihenfolge rückwärts runterfahren, wie der Autostart eingestellt ist.
    Anzumerken ist noch, dass man das Script oben nicht per Copy&Paste übernehmen sollte, da die “” in einer txt-Datei falsch dargestellt werden und dann das Script nicht funktioniert 😉
    Falls interessant: ich habe noch zwei Qnaps für die Datensicherung an der USV hängen und habe das Script erweitert. Ob es nötig ist, weiß ich nicht, aber ich habe die plink.exe 2x kopiert und umbenannt, damit nicht 3x das gleiche Programm gestartet wird (wobei ja dann der putty aber 3x gestartet wird…)

    @START “” “c:\putty\plink.exe” ESXI -l USERNAME -pw PASSWORT “/sbin/shutdown.sh && /sbin/poweroff”
    @START “” “c:\putty\plink2.exe” QNAP1 -l USERNAME -pw PASSWORT “poweroff”
    @START “” “c:\putty\plink3.exe” QNAP2 -l USERNAME -pw PASSWORT “poweroff”

    Bei der Qnap muss einfach der SSH Zugang aktiviert werden und auch einmalig manuell verbunden und gespeichert werden. Funktioniert bei mir so wunderbar.

    Nochmals vielen Dank für die Lösung hier. Meine USV hat zwar eine Network Management Card 1, aber trotz vieler Stunden an Versuchen, habe ich das Ganze nicht zum Laufen gebracht. So gehts wunderbar und ist schnell repliziert.

  3. Nochmal ich! Habe folgendes Problem: ein lokales Adminkonto führt bei mir leider das Skript nicht aus. Es muss der Domänenadmin sein, dann funktioniert es.
    Lasse ich den APC Dienst aber mit diesem Benutzer laufen, geht die Auslastung des Servers auf Knopfdruck nach oben und bleibt da. Ich habe das auf zwei unterschiedlichen Windows Server 2016 (aktueller Updatestand) probiert. Beende ich den Dienst, geht die Auslastung sofort zurück. Jemand eine Idee??

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha: