サイトをオフにし、ファイルを展開し、サイトをオンに戻すことができるバッチスクリプトがあります。
- アプリケーションプールを停止します-動作します
- ウェブサイトを停止-動作します
- ファイルを展開する-動作する
- アプリケーションプールの起動-時々しか動作しません!
- ウェブサイトを開始-以前の作品であれば機能します
Windows Server 2012 R2を実行していますが、Octopus Deploy触手によってバッチスクリプトが実行されます。
失敗している行は次のとおりです。
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ループを作成しようとしましたが、ループは永久に失敗します。
更新
アプリケーションプールをオフにしても、プロセスが停止しないことがわかりました。
アプリケーションプールを停止した後、プロセスが引き続き実行されるのはなぜですか?文字通り、停止することなく実行を続けます。
修繕!
以下のコメントに従って、アプリケーションプールを停止するとき、スクリプトを続行する前に、完全に停止状態になっていることを確認します。
これは私が今持っているスクリプトであり、完全に機能しています:
# 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" )