Ho uno script batch che mi consente di disattivare un sito, distribuire file e riaccendere il sito.
- Arresta il pool di applicazioni: funziona
- Ferma il sito web - funziona
- Distribuisci file: funziona
- Avvia pool di applicazioni: funziona solo a volte!
- Avvia il sito Web: funziona se funziona in precedenza
Sto eseguendo Windows Server 2012 R2 e lo script batch viene eseguito da un tentacolo di Octopus Deploy.
La linea su cui sta fallendo è:
Start-WebAppPool -Name $appPoolName
Dove $ appPoolName è live.website.com
Questa linea funziona a volte ma non in altri, e non è coerente in alcun modello.
Ho lo stesso script che funziona su altri server. Ho verificato se il servizio Informazioni applicazione è in esecuzione e funziona correttamente. Non ci sono registri di sistema nel Visualizzatore eventi.
Tuttavia, ho questo errore di applicazione che viene generato quando viene chiamato Start-WebAppPool:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
Qualcuno sa perché questo potrebbe accadere? Ho provato a scrivere un ciclo do-while fino a quando non si trova in uno stato "Avviato", ma i cicli falliscono per sempre.
Aggiornare
Risulta che il processo non si interrompe quando spengo il pool di applicazioni.
Perché il processo dovrebbe continuare a essere eseguito dopo l'arresto del pool di applicazioni? Continua letteralmente a correre, senza fermarsi.
Fisso!
Quindi - seguendo i commenti qui sotto, quando interrompo il pool di applicazioni ora mi assicuro che sia completamente allo stato di arresto prima di continuare lo script.
Questo è lo script che ho ora e funziona perfettamente:
# 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" )