পাওয়ারশেল স্ক্রিপ্টের মাধ্যমে অ্যাপ পুল শুরু করার চেষ্টা করা হচ্ছে - মাঝে মাঝে ত্রুটি হচ্ছে


19

আমার একটি ব্যাচের স্ক্রিপ্ট রয়েছে যা আমাকে একটি সাইট বন্ধ করতে, ফাইল স্থাপন করতে এবং সাইটটিকে আবার চালু করার অনুমতি দেয়।

  1. অ্যাপ্লিকেশন পুল - কাজ বন্ধ করুন
  2. কাজ বন্ধ - ওয়েবসাইট
  3. ফাইল স্থাপন করুন - কাজ করে
  4. অ্যাপ্লিকেশন পুল শুরু করুন - কেবল কখনও কখনও কাজ করে!
  5. ওয়েবসাইটটি শুরু করুন - পূর্ববর্তী কাজগুলি যদি কাজ করে

আমি উইন্ডোজ সার্ভার 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" )

1
আমার কাছে মনে হচ্ছে আপনি অ্যাপ পুল স্টপ কমান্ড সাফল্যের সাথে জারি করছেন, তবে আপনি যখন আবার এটি শুরু করার চেষ্টা করবেন তখন এটি আসলে থামেনি। সম্ভবত কারণ আপনার সম্পাদনায় আপনি যে "প্রক্রিয়া" উল্লেখ করেছেন সেটি এটি চলমান অবস্থায় (বা সম্ভবত "থামানো" অবস্থায়) ধরে রয়েছে, কিছু শেষ হওয়ার অপেক্ষায়। এটা কি সবসময় একই প্রক্রিয়া ধরে রাখে? সেই প্রক্রিয়াটি কী? (সিস্টেম প্রক্রিয়া, বা আপনার ওয়েব অ্যাপ্লিকেশনের অংশ, বা ???)। যদি এটি এমন কোনও প্রক্রিয়া যা আপনার ওয়েব অ্যাপ্লিকেশন বাদে থাকে তবে কেন এটি ডিবাগ করবেন না এবং কী অপেক্ষা করছে তা নির্ধারণ করবেন না (যদি কিছু থাকে)?
ʜιᴇcʜιᴇ007

1
স্টপ-গ্যাপ হিসাবে, সম্ভবত স্ক্রিপ্টে কোডটি যুক্ত করুন স্ক্রিপ্টে চালিয়ে যাওয়ার আগে অ্যাপ পুলটি আসলে থামার স্থানে অপেক্ষা না করা পর্যন্ত অপেক্ষা করতে?
01cʜιᴇ007

2
@ বেস 33, আপনি কি কোনও উত্তরে উত্তরটি পেস্ট করতে পারবেন এবং সমাধান হিসাবে চিহ্নিত করুন? তারপরে এটি আর "
উত্তরহীন

উত্তর:


1

অক্টোপাস ডিপ্লয়ে কিছু সম্প্রদায় পাওয়ারশেল স্ক্রিপ্ট রয়েছে, যা আপনি এখানে https://library.octopus.com/listing খুঁজে পেতে পারেন

এটি তাদের মধ্যে একটির সামগ্রী, যা আবার চেষ্টা করে:

# Load IIS module:
Import-Module WebAdministration

# Get AppPool Name
$appPoolName = $OctopusParameters['appPoolName']
# Get the number of retries
$retries = $OctopusParameters['appPoolCheckRetries']
# Get the number of attempts
$delay = $OctopusParameters['appPoolCheckDelay']

# Check if exists
if(Test-Path IIS:\AppPools\$appPoolName) {

    # Stop App Pool if not already stopped
    if ((Get-WebAppPoolState $appPoolName).Value -ne "Stopped") {
        Write-Output "Stopping IIS app pool $appPoolName"
        Stop-WebAppPool $appPoolName

        $state = (Get-WebAppPoolState $appPoolName).Value
        $counter = 1

        # Wait for the app pool to the "Stopped" before proceeding
        do{
            $state = (Get-WebAppPoolState $appPoolName).Value
            Write-Output "$counter/$retries Waiting for IIS app pool $appPoolName to shut down completely. Current status: $state"
            $counter++
            Start-Sleep -Milliseconds $delay
        }
        while($state -ne "Stopped" -and $counter -le $retries)

        # Throw an error if the app pool is not stopped
        if($counter -gt $retries) {
            throw "Could not shut down IIS app pool $appPoolName. `nTry to increase the number of retries ($retries) or delay between attempts ($delay milliseconds)." }
    }
    else {
        Write-Output "$appPoolName already Stopped"
    }
}
else {
    Write-Output "IIS app pool $appPoolName doesn't exist"
}

যা এই লাইব্রেরি টেমপ্লেট থেকে আসে https://library.octopus.com/step-templates/3aaf34a5-90eb-4ea1-95db-15ec93c1e54d/actiontemplate-iis-apppool-stop

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.