J'ai un script batch qui me permet de désactiver un site, de déployer des fichiers et de le réactiver.
- Arrêter le pool d'applications - fonctionne
- Arrêtez le site - travaux
- Déployer des fichiers - travaux
- Démarrer le pool d'applications - ne fonctionne que parfois!
- Démarrer le site Web - fonctionne si les travaux précédents
J'exécute Windows Server 2012 R2 et le script de commandes est exécuté par un tentacule Octopus Deploy.
La ligne sur laquelle il échoue est:
Start-WebAppPool -Name $appPoolName
Où $ appPoolName est live.website.com
Cette ligne fonctionne parfois mais pas les autres et n'est cohérente dans aucun modèle.
J'ai le même script travaillant sur d'autres serveurs. J'ai vérifié si le service d'informations sur les applications fonctionne et fonctionne correctement. Il n'y a pas de journaux système dans l'Observateur d'événements.
Cependant, j'ai cette seule erreur d'application qui est déclenchée lorsque le Start-WebAppPool est appelé:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
Quelqu'un sait-il pourquoi cela peut se produire? J'ai essayé d'écrire une boucle do-while jusqu'à ce qu'elle soit dans un état "Démarré", mais elle fait une boucle sans succès.
Mise à jour
Il s'avère que le processus ne s'arrête pas lorsque je désactive le pool d'applications.
Pourquoi le processus continuerait-il de s'exécuter après l'arrêt du pool d'applications? Il continue littéralement à fonctionner, sans s'arrêter.
Fixé!
Donc - en suivant les commentaires ci-dessous, lorsque j'arrête le pool d'applications, je m'assure maintenant qu'il est complètement à l'état arrêté avant de continuer le script.
Voici le script que j'ai maintenant et qui fonctionne pleinement:
# 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" )
Réponses:
Octopus Deploy dispose de quelques scripts PowerShell communautaires, que vous pouvez trouver ici https://library.octopus.com/listing
C'est le contenu de l'un d'entre eux, qui a des tentatives:
Qui provient de ce modèle de bibliothèque https://library.octopus.com/step-templates/3aaf34a5-90eb-4ea1-95db-15ec93c1e54d/actiontemplate-iis-apppool-stop
la source