mcpuser 11 Geschrieben 17. Juli 2012 Melden Teilen Geschrieben 17. Juli 2012 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ß Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 17. Juli 2012 Melden Teilen Geschrieben 17. Juli 2012 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. Zitieren Link zu diesem Kommentar
nerd 28 Geschrieben 17. Juli 2012 Melden Teilen Geschrieben 17. Juli 2012 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 Zitieren Link zu diesem Kommentar
Stefan W 14 Geschrieben 17. Juli 2012 Melden Teilen Geschrieben 17. Juli 2012 hi, wenn hier nur einfache Abhängigkeiten sind - wie beschrieben Server 1 muss down sein, bevor Server 2 runterfährt, wäre auch das eine Möglichkeit shutdown /m \\Server1 -r -t 0 shutdown /m \\Server2 -r -t 300 Somit wartet Server 2 5Minuten bis er anfängt runter zu fahren. Zitieren Link zu diesem Kommentar
mcpuser 11 Geschrieben 17. Juli 2012 Autor Melden Teilen Geschrieben 17. Juli 2012 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. Zitieren Link zu diesem Kommentar
mcpuser 11 Geschrieben 17. Juli 2012 Autor Melden Teilen Geschrieben 17. Juli 2012 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 17. Juli 2012 Melden Teilen Geschrieben 17. Juli 2012 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. Zitieren Link zu diesem Kommentar
mcpuser 11 Geschrieben 18. Juli 2012 Autor Melden Teilen Geschrieben 18. Juli 2012 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 } } Zitieren Link zu diesem Kommentar
mcpuser 11 Geschrieben 19. Juli 2012 Autor Melden Teilen Geschrieben 19. Juli 2012 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 19. Juli 2012 Melden Teilen Geschrieben 19. Juli 2012 Das müsste z.B. so gehen (Ungetestet, aus dem Kopf abgetippt): $serveroff = $true While($serveroff){ & ping.exe -n 1 $serverdown if(!($?)){ $serveroff = $false } } Welche schleife du nimmst ist egal. Zitieren Link zu diesem Kommentar
mcpuser 11 Geschrieben 19. Juli 2012 Autor Melden Teilen Geschrieben 19. Juli 2012 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 19. Juli 2012 Melden Teilen Geschrieben 19. Juli 2012 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. Zitieren Link zu diesem Kommentar
mcpuser 11 Geschrieben 19. Juli 2012 Autor Melden Teilen Geschrieben 19. Juli 2012 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 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 19. Juli 2012 Melden Teilen Geschrieben 19. Juli 2012 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. Zitieren Link zu diesem Kommentar
mcpuser 11 Geschrieben 26. Juli 2012 Autor Melden Teilen Geschrieben 26. Juli 2012 Guten Morgen, komme erst heute wieder dazu. Werden die ganze Geschichte nun auch anderst machen - danke für eure Hilfe aber Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.