Tengo un script por lotes que me permite apagar un sitio, implementar archivos y volver a encender el sitio.
- Detener el grupo de aplicaciones: funciona
- Detener el sitio web - funciona
- Implementar archivos - funciona
- Iniciar grupo de aplicaciones: solo funciona a veces.
- Iniciar el sitio web: funciona si funciona anteriormente
Estoy ejecutando Windows Server 2012 R2, y el script por lotes es ejecutado por un tentáculo Octopus Deploy.
La línea en la que falla es:
Start-WebAppPool -Name $appPoolName
Donde $ appPoolName es live.website.com
Esta línea funciona a veces pero no en otras, y no es consistente en ningún patrón.
Tengo el mismo script trabajando en otros servidores. He comprobado si el servicio de información de la aplicación se está ejecutando y si funciona correctamente. No hay registros del sistema en el visor de eventos.
Aunque, tengo este error de aplicación que se genera cuando se llama Start-WebAppPool:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
¿Alguien sabe por qué esto puede estar sucediendo? He intentado escribir un bucle do-while hasta que esté en un estado "Iniciado", pero falla para siempre.
Actualizar
Resulta que el proceso no se detiene cuando apago el grupo de aplicaciones.
¿Por qué el proceso continuaría ejecutándose después de detener el grupo de aplicaciones? Literalmente continúa corriendo, sin parar.
¡Fijo!
Entonces, siguiendo los comentarios a continuación, cuando detengo el grupo de aplicaciones ahora me aseguro de que esté completamente en estado detenido antes de continuar el script.
Este es el script que tengo ahora y está funcionando completamente:
# 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" )
fuente
Respuestas:
Octopus Deploy tiene algunos scripts de PowerShell de la comunidad, que puede encontrar aquí https://library.octopus.com/listing
Este es el contenido de uno de ellos, que tiene reintentos:
Que proviene de esta plantilla de biblioteca https://library.octopus.com/step-templates/3aaf34a5-90eb-4ea1-95db-15ec93c1e54d/actiontemplate-iis-apppool-stop
fuente