Tôi có một tập lệnh bó cho phép tôi tắt một trang web, triển khai các tệp và bật lại trang web.
- Dừng nhóm ứng dụng - hoạt động
- Dừng trang web - hoạt động
- Triển khai tệp - công trình
- Bắt đầu ứng dụng Pool - đôi khi chỉ hoạt động!
- Bắt đầu trang web - hoạt động nếu công việc trước đó
Tôi đang chạy Windows Server 2012 R2 và tập lệnh bó được thực thi bởi một xúc tu Octopus Deploy.
Dòng nó không thành công là:
Start-WebAppPool -Name $appPoolName
$ AppPoolName là live.website.com
Dòng này đôi khi hoạt động nhưng không phải là dòng khác, và không nhất quán trong bất kỳ mẫu nào.
Tôi có cùng một kịch bản làm việc trên các máy chủ khác. Tôi đã kiểm tra xem dịch vụ Thông tin ứng dụng có chạy hay không và nó có chạy tốt không. Không có nhật ký hệ thống trong trình xem sự kiện.
Mặc dù, tôi có một lỗi ứng dụng này được nêu ra khi Start-WebAppPool được gọi:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
Có ai biết tại sao điều này có thể xảy ra? Tôi đã cố gắng viết một vòng lặp do-while cho đến khi nó ở trạng thái "Bắt đầu", nhưng nó lặp lại thất bại mãi mãi.
Cập nhật
Hóa ra quá trình không dừng lại khi tôi tắt nhóm Ứng dụng.
Tại sao quá trình sẽ tiếp tục chạy sau khi dừng nhóm ứng dụng? Nó thực sự tiếp tục chạy, không dừng lại.
Đã sửa!
Vì vậy - theo các bình luận bên dưới, khi tôi dừng nhóm ứng dụng, bây giờ tôi chắc chắn rằng nó hoàn toàn ở trạng thái dừng trước khi tiếp tục tập lệnh.
Đây là kịch bản bây giờ tôi có và đang hoạt động đầy đủ:
# 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" )