Eu tenho um script em lote que permite desativar um site, implantar arquivos e ativá-lo novamente.
- Interromper o pool de aplicativos - funciona
- Pare o site - funciona
- Implantar arquivos - obras
- Iniciar Pool de Aplicativos - funciona apenas algumas vezes!
- Iniciar o site - funciona se trabalhos anteriores
Estou executando o Windows Server 2012 R2 e o script em lote é executado por um tentáculo do Octopus Deploy.
A linha em que está falhando é:
Start-WebAppPool -Name $appPoolName
Onde $ appPoolName é live.website.com
Essa linha funciona algumas vezes, mas não outras, e não é consistente em nenhum padrão.
Eu tenho o mesmo script trabalhando em outros servidores. Eu verifiquei se o serviço de Informações do Aplicativo está sendo executado e está sendo executado corretamente. Não há logs do sistema no visualizador de eventos.
Embora eu tenha esse erro de aplicativo gerado quando o Start-WebAppPool é chamado:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
Alguém sabe por que isso pode estar acontecendo? Eu tentei escrever um loop do-while até que ele estivesse no estado "Iniciado", mas ele repetiu para sempre.
Atualizar
Acontece que o processo não está parando quando eu desativo o pool de aplicativos.
Por que o processo continuaria em execução após a interrupção do pool de aplicativos? Ele literalmente continua funcionando, sem parar.
Fixo!
Então - seguindo os comentários abaixo, quando paro o pool de aplicativos, agora eu asseguro que ele esteja completamente no estado parado antes de continuar o script.
Este é o script que eu tenho agora e está funcionando perfeitamente:
# 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" )