मेरे पास एक बैच स्क्रिप्ट है जो मुझे एक साइट को बंद करने, फाइलों को तैनात करने और साइट को वापस चालू करने की अनुमति देती है।
- एप्लिकेशन पूल बंद करो - काम करता है
- वेबसाइट बंद करो - काम करता है
- फ़ाइलें तैनात करें - काम करता है
- एप्लिकेशन पूल शुरू करें - कभी-कभी ही काम करता है!
- वेबसाइट शुरू करें - अगर पिछले काम करता है
मैं Windows Server 2012 R2 चला रहा हूं, और ऑक्टोपस डिप्लॉय टेंकल द्वारा बैच स्क्रिप्ट निष्पादित की जाती है।
यह जिस लाइन पर फेल हो रहा है वह है:
Start-WebAppPool -Name $appPoolName
जहां $ appPoolName live.website.com है
यह रेखा कभी-कभी काम करती है लेकिन अन्य नहीं, और किसी भी पैटर्न में सुसंगत नहीं है।
मेरे पास अन्य सर्वर पर समान स्क्रिप्ट काम कर रही है। मैंने जाँच की है कि अनुप्रयोग सूचना सेवा चल रही है या नहीं और यह ठीक चल रही है। इवेंट व्यूअर में कोई सिस्टम लॉग नहीं हैं।
हालाँकि, मेरे पास यह एक आवेदन त्रुटि है जो स्टार्ट-वेबएपपूल कहे जाने पर उठाई जाती है:
ERROR + Start-WebAppPool -Name $appPoolName
ERROR start-webitem : The service cannot accept control messages at this time.
क्या किसी को पता है कि ऐसा क्यों हो सकता है? मैंने एक "शुरू" अवस्था में होने तक एक लूप करते हुए लिखने की कोशिश की है, लेकिन यह हमेशा के लिए विफल हो जाता है।
अपडेट करें
जब मैं एप्लिकेशन पूल बंद करता हूं तो प्रक्रिया बंद नहीं होती है।
एप्लिकेशन पूल को रोकने के बाद प्रक्रिया क्यों चलती रहेगी? यह सचमुच बिना रुके चलता रहता है।
फिक्स्ड!
इसलिए - नीचे दी गई टिप्पणियों के बाद, जब मैं एप्लिकेशन पूल को रोक देता हूं तो मैं यह सुनिश्चित करता हूं कि यह स्क्रिप्ट जारी रखने से पहले पूरी तरह से बंद अवस्था में हो।
यह स्क्रिप्ट है जो अब मेरे पास है और पूरी तरह से काम कर रही है:
# 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" )