ฉันมีสคริปต์แบตช์ที่อนุญาตให้ฉันปิดไซต์ปรับใช้ไฟล์และเปิดไซต์อีกครั้ง
- หยุดแอพพลิเคชั่นพูล - ทำงาน
- หยุดเว็บไซต์ - ใช้งานได้
- ปรับใช้ไฟล์ - ใช้งานได้
- เริ่มกลุ่มแอปพลิเคชัน - บางครั้งใช้งานได้เท่านั้น!
- เริ่มเว็บไซต์ - ใช้งานได้หากใช้งานก่อนหน้านี้
ฉันใช้ Windows Server 2012 R2 และสคริปต์แบทช์ดำเนินการโดยหนวดปลาหมึก Octopus Deploy
บรรทัดที่มันล้มเหลวคือ:
Start-WebAppPool -Name $appPoolName
ที่ $ appPoolName คือ live.website.com
บางครั้งบรรทัดนี้ใช้งานได้ แต่ไม่ใช่สายอื่นและไม่สอดคล้องกันในรูปแบบใด ๆ
ฉันมีสคริปต์เดียวกันทำงานบนเซิร์ฟเวอร์อื่น ๆ ฉันตรวจสอบว่าบริการข้อมูลแอปพลิเคชันทำงานอยู่หรือไม่และทำงานได้ดี ไม่มีบันทึกของระบบในตัวแสดงเหตุการณ์
แม้ว่าฉันจะมีข้อผิดพลาดของแอปพลิเคชั่นตัวนี้ซึ่งเกิดขึ้นเมื่อมีการเรียก Start-WebAppPool:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
มีใครรู้บ้างไหมว่าทำไมสิ่งนี้ถึงเกิดขึ้น ฉันพยายามเขียนลูป do-while จนกระทั่งอยู่ในสถานะ "เริ่มต้น" แต่ลูปล้มเหลวตลอดไป
ปรับปรุง
เปิดใช้งานกระบวนการไม่หยุดทำงานเมื่อฉันปิด Application pool
เหตุใดกระบวนการจึงทำงานต่อหลังจากหยุดแอปพลิเคชัน แท้จริงมันยังคงทำงานโดยไม่หยุด
แก้ไขแล้ว!
ดังนั้น - ตามความคิดเห็นด้านล่างเมื่อฉันหยุดกลุ่มแอพพลิเคชั่นตอนนี้ฉันตรวจสอบให้แน่ใจว่ามันอยู่ในสถานะหยุดอย่างสมบูรณ์ก่อนที่จะดำเนินการต่อสคริปต์
นี่คือสคริปต์ที่ฉันมีตอนนี้และทำงานได้อย่างสมบูรณ์:
# 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" )