আমার একটি ব্যাচের স্ক্রিপ্ট রয়েছে যা আমাকে একটি সাইট বন্ধ করতে, ফাইল স্থাপন করতে এবং সাইটটিকে আবার চালু করার অনুমতি দেয়।
- অ্যাপ্লিকেশন পুল - কাজ বন্ধ করুন
- কাজ বন্ধ - ওয়েবসাইট
- ফাইল স্থাপন করুন - কাজ করে
- অ্যাপ্লিকেশন পুল শুরু করুন - কেবল কখনও কখনও কাজ করে!
- ওয়েবসাইটটি শুরু করুন - পূর্ববর্তী কাজগুলি যদি কাজ করে
আমি উইন্ডোজ সার্ভার 2012 আর 2 চালাচ্ছি, এবং ব্যাচ স্ক্রিপ্টটি একটি অক্টোপাস ডিপ্লয় টেন্টিল দ্বারা সম্পাদিত হয়।
এটি যে লাইনে ব্যর্থ হচ্ছে তা হ'ল:
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.
এমন কি হতে পারে তা কি কেউ জানেন? এটি "শুরু" অবস্থায় না আসা পর্যন্ত আমি একটি ডু-ওয়েল লুপ লেখার চেষ্টা করেছি, তবে এটি চিরতরে ব্যর্থ হয়ে যায়।
হালনাগাদ
যখন আমি অ্যাপ্লিকেশন পুলটি বন্ধ করব তখন প্রক্রিয়াটি থামছে না Turn
কেন অ্যাপ্লিকেশন পুল বন্ধ করে প্রক্রিয়া চলতে থাকবে? এটি আক্ষরিকভাবে চলতে থাকে, থামিয়ে না দিয়ে।
সংশোধন করা হয়েছে!
সুতরাং - নীচের মন্তব্যগুলি অনুসরণ করে, আমি যখন অ্যাপ্লিকেশন পুলটি বন্ধ করি তখন আমি এখন নিশ্চিত হয়েছি যে স্ক্রিপ্টটি চালিয়ে যাওয়ার আগে এটি সম্পূর্ণ বন্ধ রয়েছে।
আমার কাছে এখন এটিই স্ক্রিপ্ট এবং সম্পূর্ণরূপে কাজ করছে:
# 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" )