windows – Powershell スクリプトを使ってアプリプールを起動しようとすると、断続的にエラーが発生します

iis windows windows-server-2012-r2

私は、サイトをオフにして、ファイルをデプロイして、サイトをオンに戻すことができるバッチスクリプトを持っています

  1. アプリケーションプールを停止します
  2. ウェブサイトを停止する – 作品
  3. ファイルの配置 – 動作します
  4. アプリケーションプールを開始 – 時々しか動作しません
  5. ウェブサイトを開始する – 以前の作品の場合は動作します

Windows Server 2012 R2を実行しているのですが、バッチスクリプトがオクトパスデプロイの触手で実行されてしまいます

それが失敗しているラインは

 Start-WebAppPool -Name $appPoolName

ここで $appPoolName は live.website.com です

この線は時々効くけど、他の線は効かないし、どのパターンでも一貫性がありません

他のサーバーでも同じスクリプトが動いています。アプリケーション情報サービスが動作しているか確認してみましたが、問題なく動作しています。イベントビューアにはシステムログがありません

しかし、Start-WebAppPoolが呼ばれたときに発生するアプリケーションエラーが1つあります

ERROR  + Start-WebAppPool -Name $appPoolName
ERROR  start-webitem : The service cannot accept control messages at this time.

このようなことが起こる原因をご存知の方はいらっしゃいますか?スタート」状態になるまでdo-whileループを書こうとしたのですが、いつまでたってもループしてしまい失敗しています

Update

アプリケーションプールをオフにしてもプロセスが停止しないことがわかりました

なぜアプリケーションプールを停止した後もプロセスが実行され続けるのでしょうか?文字通り、停止せずに実行し続けます

Fixed!

そこで – 以下のコメントに従って、アプリケーションプールを停止するときに、スクリプトを続行する前に完全に停止状態になっていることを確認するようにしました

これは私が今持っているスクリプトで、完全に動作しています

# 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" )

  19  Base33  2015-11-09


ベストアンサー

Octopus Deploy にはいくつかのコミュニティ PowerShell スクリプトがあり、https://library.octopus.com/listing で見つけることができます

その中の一つにリトライがあるという内容です

# Load IIS module:
Import-Module WebAdministration

# Get AppPool Name
$appPoolName = $OctopusParameters['appPoolName']
# Get the number of retries
$retries = $OctopusParameters['appPoolCheckRetries']
# Get the number of attempts
$delay = $OctopusParameters['appPoolCheckDelay']

# Check if exists
if(Test-Path IIS:\AppPools\$appPoolName) {

# Stop App Pool if not already stopped
if ((Get-WebAppPoolState $appPoolName).Value -ne "Stopped") {
Write-Output "Stopping IIS app pool $appPoolName"
Stop-WebAppPool $appPoolName

$state = (Get-WebAppPoolState $appPoolName).Value
$counter = 1

# Wait for the app pool to the "Stopped" before proceeding
do{
$state = (Get-WebAppPoolState $appPoolName).Value
Write-Output "$counter/$retries Waiting for IIS app pool $appPoolName to shut down completely. Current status: $state"
$counter++
Start-Sleep -Milliseconds $delay
}
while($state -ne "Stopped" -and $counter -le $retries)

# Throw an error if the app pool is not stopped
if($counter -gt $retries) {
throw "Could not shut down IIS app pool $appPoolName. `nTry to increase the number of retries ($retries) or delay between attempts ($delay milliseconds)." }
}
else {
Write-Output "$appPoolName already Stopped"
}
}
else {
Write-Output "IIS app pool $appPoolName doesn't exist"
}

これは、このライブラリテンプレートhttps://library.octopus.com/step-templates/3aaf34a5-90eb-4ea1-95db-15ec93c1e54d/actiontemplate-iis-apppool-stopから来ています

2  spikey_richie  2018-10-03


タイトルとURLをコピーしました