Jump to content

Remote Rechner herunterfahren und Abhängigkeit beachten


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

stehe gerade vor der Aufgabe bei bestimmten Ereignissen div. Server herunterzufahren und dies natürlich automatisch.

 

OK soweit ganz gut und einfach allerdings soll der Spaß Abhängigkeiten beachten.

 

Das heißt z.B. server1 muss vor server2 herunter gefahren werden.

 

Wie würdet ihr so etwas lösen?

 

Dachte an ein Powershellscript mit

restart-computer

aber die Abhängigkeiten darzustellen ist nicht so leicht - evtl. mit nem Ping wenn 3mal nicht erreichbar oder sowas

 

Dachte ich frage hier mal wie andere das lösen würden

 

Gruß

Link zu diesem Kommentar

Hi,

eine Möglichkeit wäre, wie du bereits beschrieben hast Ping. Das kann man problemlos per PowerShell auswerten.


#Funktion Ping 
function ping ($ping_host) 
{ 
   $ping = new-object system.net.networkinformation.ping $pingreturns=$ping.send($ping_host) 
   if($pingreturns.status -ne "success") 
   { 
       #Platzhalter Fehlerabarbeitung 
       echo 'fehler' 
   } 
} 
#Funktionsaufruf / Beispiel 
#1er Server 
ping ("192.168.0.1") 

 

Edit: Die Ereignisse die den Shutdown auslesen kannst du ebenfalls auswerten - Wenn diese z.B. im Eventlog von Windows sind ;)

Du kannst z.B. den PS als Task laufen lassen, der per WMI ein Event sucht und im Abschluss die Neustarts einleitet.

Link zu diesem Kommentar

Hi,

 

ich habe solche Lösungen bis jetzt nur für den Neustart der Systeme gebraucht um z. B. einen Anwendungsserver erst hoch zu fahren wenn der Datenbankserver oben ist oder die regulären Sever erst starten wenn min. ein DC verfügbar ist etc.

 

Wenn ich sowas beim Herunterfahren machen müßte, dann würde ich vermutlich auch mit ping arbeiten - an dem Punkt wo eine Anwendung nicht mehr auf Netzwerkanfragen reagiert sollte auch keine Abhängigkeit mehr bestehen.

 

Viele Grüße

Link zu diesem Kommentar

shutdown /m \\Server1 -r -t 0

shutdown /m \\Server2 -r -t 300

Somit wartet Server 2 5Minuten bis er anfängt runter zu fahren.

 

Danke für eure Antworten.

 

Angenommen Server1 fährt nicht in den 300 Sekunden runter dann fährt Server2 trotzdem herunter. Ich möchte erst Server2 herunterfahren wenn ich eine Bestätigung von Server 1 bekommen haben das er nicht mehr lebt

 

Das mit dem warten ist aber gar nicht so schlecht - brauch da ja nicht 300 Pings veranstalten sondern einfach 2 Minuten waren und dann nen Ping starten - schlägt der fehl ist der nächste Server dran usw.

Link zu diesem Kommentar

Hab mal folgenden Code zusammengewürfelt

 


# Variablen setzen
$serverliste = get-content "serverliste.txt"

# Herunterfahren der ersten Maschine
stop-computer -computername server1

# Ping Check
foreach ($server in $serverliste)

{
# 40 sekunden warten bis weitergemacht wird  - server fährt derzeit runter
   timeout 40 /nobreak
   # ping aktueller server der serverliste wird abgefragt
   ping $server -n 3
$PingErgebnisServer = "$lastexitcode"

   if ($PingErgebnisServer -eq "0") 

   {  

   } else

   {	
        stop-computer -computername $server        
}
}

 

Serverliste sieht folgendermaßen aus

 

Server1
Server2
Server3

 

So hmm nun

 

Server1 wird heruntergefahren - 40 Sek. wird gewartet Ping auf Server1 - keine Antwort - Shutdown von Server 2 eigentlich - hier ist $server aber noch Server1 - wie kann ich hier weitergehen

Link zu diesem Kommentar

Du brauchst 2 Variablen.

 

Das:

$PingErgebnisServer = "$lastexitcode"

if ($PingErgebnisServer -eq "0")

 

kannst du mit

if($?)

zusammenfassen.

 

Ich würde aber keine if/else machen sondern eine Schleife. Dort muss man nicht explizit 40 Sec warten sondern kann kleinere Zeiträume nehmen und wenn es mal mehr als 40 sec dauert ist das auch kein Beinbuch.

 

Was ist dieses Timeout? Wartezeit kannst du mit start-sleep machen.

Link zu diesem Kommentar

Guten Morgen,

 

ja 2 Variablen - müsste dann ja so funktionieren (ohne getestet zu haben) jetzt erstmal ohne Schleife - möchte eins nach dem anderen testen

 

sorry wenn der Code **** aussieht - bin kein Programmierer - bin für jeden Tipp zu haben

 

# Variablen setzen
$serverliste = get-content "serverliste.txt"
$serverdown = server1

# Herunterfahren der ersten Maschine
stop-computer -computername server1

# Ping Check
foreach ($server in $serverliste)

{
# 40 sekunden warten bis weitergemacht wird  - server fährt derzeit runter
   timeout 40 /nobreak
   # ping aktueller server der serverliste wird abgefragt
   ping $serverdown -n 3
$PingErgebnisServer = "$lastexitcode"

   if ($PingErgebnisServer -eq "0") 

   {  

   } else

   {	
        stop-computer -computername $server 
        $serverdown = $server

}
}

Link zu diesem Kommentar

Hallo,

 

das mit dem IF-ELSE ist ja ganz nett aber wie du schon gesagt hast nicht so optimal - vorallem kann ich nicht prüfen ob der Server wirklich down ist - was ist wenn er nach einer gewissen Zeit immernoch da ist

 

 

Verstehe das aber mit einer Schleife noch nicht ganz

 

Ich brauch eine Schleife die solange weitermacht bis kein Ping mehr erfolgreich ist.

 

Brauch ich da eine Do-While Schleife oder eine Do-Until-Schleife?

 

Do {????}
While ($PingErgebnisServer -eq "0") 

 

Verstehe ich gerade was ich innerhalb der Schleife machen muss

Link zu diesem Kommentar
das wäre doch eine Endlosschleife wo gar nichts überprüft

 

Sorry verstehe das leider nicht

 

Ich brauch nur BEDINGUNG = Antwort Ping OK

 

DANN = Schleife wiederholen

 

ANONSTEON = SHUTDOWN

 

Kriege das nicht hin

 

In der Schleife wird der Ping überprüft.

Wenn der Ping fehlschlägt springt das Script aus der Schleife und du kannst nach der Schleife dein Showdown machen.

Link zu diesem Kommentar
In der Schleife wird der Ping überprüft.

Wenn der Ping fehlschlägt springt das Script aus der Schleife und du kannst nach der Schleife dein Showdown machen.

 

Also

 

 do {ping $serverdown}

    until ($PingErgebnisServer = "$lastexitcode", $PingErgebnisServer -ne "0")


stop-computer -computername $server

 

Dann führt er ja immer den Shutdown aus - den Befehl kann ich ja nicht in until packen - verstehe nicht wo ich was reinpacken muss

Link zu diesem Kommentar

Wieso nimmst du nicht einfach meinen Code und hängst dein stop-computer darunter an und testest das dann?

 

Ich dachte es sollte immer einen Shutdown geben. Sonst musst du einen übergeordneten Timeout definieren und dann komplett rausgehen (mit Break oder noch einer Schleife drum rum.

 

Tipp: Nimm mal ne While Schleife und keine Do-While. Das macht es etwas einfacher. Außerdem sollte das Komma im until ein Semikolon werden, da es sonst nicht geht.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...