Batch Befehle sollen warten bis vorgängiger Dienst beendet ist
Hallo Community
Ist es möglich in einer Batch Datei, welche mehrere Befehle bzw. weitere Batch Dateien aufruft, sicherzustellen, dass die nachfolgenden Befehle und Batchdateien erst ausgeführt wird, wenn der vorgängige Befehl bzw. Ausführungs- /Installationsienst beendet wurde?
Ist es möglich in einer Batch Datei, welche mehrere Befehle bzw. weitere Batch Dateien aufruft, sicherzustellen, dass die nachfolgenden Befehle und Batchdateien erst ausgeführt wird, wenn der vorgängige Befehl bzw. Ausführungs- /Installationsienst beendet wurde?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4730579881
Url: https://administrator.de/forum/batch-befehle-sollen-warten-bis-vorgaengiger-dienst-beendet-ist-4730579881.html
Ausgedruckt am: 22.12.2024 um 03:12 Uhr
4 Kommentare
Neuester Kommentar
Hi,
jain.
Man kann Anwendungen (Befehle) über
starten. Dies hat den Parameter "/wait", mit welchen man anweisen kann, dass beim Starten von GUI-Anwendungen (Nicht-Konsolen-Anwendungen), welche sonst "asynchron" ausgeführt würden, auf deren Beendigung gewartet wird, bevor zur Kommandozeile zurückgekehrt wird. Sprich, bevor die nächste Zeile der batch abgearbeitet wird.
Allerdings hat das keinen Effekt, wenn das ausgeführte Programm Hintergrund-Aufgaben startet. Auf diese Hintergrundaufgaben kann man nur durch explizite Abfragen derer Ausführungszustände warten.
E.
jain.
Man kann Anwendungen (Befehle) über
start
Allerdings hat das keinen Effekt, wenn das ausgeführte Programm Hintergrund-Aufgaben startet. Auf diese Hintergrundaufgaben kann man nur durch explizite Abfragen derer Ausführungszustände warten.
E.
Hallo,
würde da auf PowerShell gehen. Da man relativ einfach schleifen bauen kann. Bzw. ist das Handling schöner. Es gibt ja meist ein Zeitproblem. Mitunter laufen sich Prozessea auch tot.
Schleife kann kontinuierlich prüfen. Man kann Delay von 10 oder 60 Sekunden einbauen, damit es nicht Dauerfeuer auf die Dienste o.ä. macht. Ist die Bedingung X erfüllt, geht es weiter.
Oder man nimmt fix Zeiten. Und behauptet der Dienst müsste nach 30 Sekunden definitiv unten sein,. Wenn nicht hart killen. Killen ist immer unschön. Hier ein MS SQL 2000 Server und ein tomcat Dienst auf einen Linux Server.
Hier wurde aber pauschal hart 30 Sekunden unterstellt.
Ich würde für dein Vorhaben - ja nachdem wie sensibel die Dienste sind - Konzept mit PowerShell und if-Block empfehlen.
Neben Diensten kann PowerShell auch Log Files lesen und du kannst den Inhalt im Script auswerten. Du hast alles zur Verfügung, was man auch unter Windows GUI sieht. Mit einer sinnvollen Kombination dieser Instrumente sollte man Zeiten gering halten und die Verabeitung "robust" gestalten können.
Hier ein Einzeiler der Dienst neustart überwacht. Die Funtktion läd dafür eine Ref.-Webseite Das kann bei dir alles sein. Query auf Dienste etc.
Am Ende hat man nur einen While-Loop.
würde da auf PowerShell gehen. Da man relativ einfach schleifen bauen kann. Bzw. ist das Handling schöner. Es gibt ja meist ein Zeitproblem. Mitunter laufen sich Prozessea auch tot.
Schleife kann kontinuierlich prüfen. Man kann Delay von 10 oder 60 Sekunden einbauen, damit es nicht Dauerfeuer auf die Dienste o.ä. macht. Ist die Bedingung X erfüllt, geht es weiter.
Oder man nimmt fix Zeiten. Und behauptet der Dienst müsste nach 30 Sekunden definitiv unten sein,. Wenn nicht hart killen. Killen ist immer unschön. Hier ein MS SQL 2000 Server und ein tomcat Dienst auf einen Linux Server.
Hier wurde aber pauschal hart 30 Sekunden unterstellt.
Ich würde für dein Vorhaben - ja nachdem wie sensibel die Dienste sind - Konzept mit PowerShell und if-Block empfehlen.
Neben Diensten kann PowerShell auch Log Files lesen und du kannst den Inhalt im Script auswerten. Du hast alles zur Verfügung, was man auch unter Windows GUI sieht. Mit einer sinnvollen Kombination dieser Instrumente sollte man Zeiten gering halten und die Verabeitung "robust" gestalten können.
if (!($found)) {
Invoke-Command -ComputerName WS2-SQL -Credential $cred `
-ScriptBlock { `
$JobA = Start-Job { `
stop-service -name "SQLSERVERAGENT" -force -passThru -ErrorAction Continue `
}; `
Start-Sleep 30 ; `
$JobS = Start-Job { `
stop-service -name "MSSQLSERVER" -force -passThru -ErrorAction Continue `
}; `
Start-Sleep 30; `
cmd /c taskkill /f /im sql*; `
Start-Sleep 5; `
Start-Service -Name "MSSQLSERVER"; `
Start-Sleep 30; `
Start-Service -Name "SQLSERVERAGENT"; `
}
Start-Sleep 5
cmd /c "C:\ProgramData\chocolatey\bin\plink.exe root@web02 -batch -i C:\fl-system\putty-private.ppk (systemctl restart tomcat8)"
WriteLog "xyneu gestartet!"
} ELSE { WriteLog "xy läuft!" }
Hier ein Einzeiler der Dienst neustart überwacht. Die Funtktion läd dafür eine Ref.-Webseite Das kann bei dir alles sein. Query auf Dienste etc.
Am Ende hat man nur einen While-Loop.
Function QueryXYZ() {
[boolean]$found = $false
$WebResponse = ""
$authstr = $BMVuser+':'+$BMVpwd
$creds = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($authstr))
$WebResponse = Invoke-WebRequest $BMVurl -TimeoutSec 60 `
-Headers @{ 'Authorization' = 'Basic ' + $creds }
$h2 = $WebResponse.AllElements | Where {$_.TagName -eq "h2"}
[boolean]$Script:found = $h2.outerText -eq $BMVtestAuftrag
}
while ((!($found)) -and $whileLoopCtr -lt 21) { QueryXYZ; Start-Sleep 5; $whileLoopCtr+=1; }
@Ralus67 was für Installationen?
https://chocolatey.org/
Die Pakete werden nacheinander installiert. Für Default Programme kann man es sich damit einfach machen. Man erhält am Ende auch ein Log Datei.
Du hast leider nicht geschrieben was für Programme.
Ggf. hilft dir eine Kombination und Choco Repros und selbstgebauten Script!
https://chocolatey.org/
Die Pakete werden nacheinander installiert. Für Default Programme kann man es sich damit einfach machen. Man erhält am Ende auch ein Log Datei.
Du hast leider nicht geschrieben was für Programme.
Ggf. hilft dir eine Kombination und Choco Repros und selbstgebauten Script!