Ich habe ein Batch-Skript, mit dem ich eine Site deaktivieren, Dateien bereitstellen und die Site wieder aktivieren kann.
- Stoppen Sie den Anwendungspool - funktioniert
- Stoppen Sie die Website - funktioniert
- Dateien bereitstellen - funktioniert
- Anwendungspool starten - funktioniert nur manchmal!
- Starten Sie die Website - funktioniert, wenn vorherige funktioniert
Ich verwende Windows Server 2012 R2 und das Batch-Skript wird von einem Octopus Deploy-Tentakel ausgeführt.
Die Zeile, in der es fehlschlägt, lautet:
Start-WebAppPool -Name $appPoolName
Wobei $ appPoolName live.website.com ist
Diese Linie funktioniert manchmal, aber nicht bei anderen und ist in keinem Muster konsistent.
Ich habe das gleiche Skript auf anderen Servern. Ich habe überprüft, ob der Anwendungsinformationsdienst ausgeführt wird und ob er ordnungsgemäß ausgeführt wird. In der Ereignisanzeige sind keine Systemprotokolle vorhanden.
Obwohl ich diesen einen Anwendungsfehler habe, der ausgelöst wird, wenn der Start-WebAppPool aufgerufen wird:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
Weiß jemand, warum dies passieren kann? Ich habe versucht, eine Do-While-Schleife zu schreiben, bis sie sich in einem "Started" -Zustand befindet, aber die Schleife schlägt für immer fehl.
Aktualisieren
Es stellt sich heraus, dass der Prozess nicht stoppt, wenn ich den Anwendungspool ausschalte.
Warum sollte der Prozess nach dem Stoppen des Anwendungspools weiter ausgeführt werden? Es läuft buchstäblich weiter, ohne anzuhalten.
Fest!
Wenn ich also den Kommentaren unten folge, stelle ich beim Beenden des Anwendungspools jetzt sicher, dass er vollständig gestoppt ist, bevor ich mit dem Skript fortfahre.
Dies ist das Skript, das ich jetzt habe und das voll funktioniert:
# Load IIS module:
Import-Module WebAdministration
# Get AppPool Name
$appPoolName = $OctopusParameters['appPoolName']
if ( (Get-WebAppPoolState -Name $appPoolName).Value -eq "Stopped" )
{
Write-Host "AppPool already stopped: " + $appPoolName
}
else
{
Write-Host "Shutting down the AppPool: " + $appPoolName
Write-Host (Get-WebAppPoolState $appPoolName).Value
# Signal to stop.
Stop-WebAppPool -Name $appPoolName
}
do
{
Write-Host (Get-WebAppPoolState $appPoolName).Value
Start-Sleep -Seconds 1
}
until ( (Get-WebAppPoolState -Name $appPoolName).Value -eq "Stopped" )