সমান্তরালে একাধিক উইন্ডোজ সার্ভারে কমান্ড চালানোর কোনও উপায় আছে কি?


2

প্রতিবার এবং পরে, আমাকে একাধিক উইন্ডোজ সার্ভারে একটি কমান্ড চালানো দরকার (স্ক্রিপ্ট ফাইলগুলি [এবং অন্যান্য এলোমেলো জিনিস] সম্বলিত উত্স কোড সংগ্রহস্থল থেকে ফাইলগুলি সিঙ্ক্রোনাইজ করা)। এই আদেশের কার্য সম্পাদনের সময়টি নেটওয়ার্কের বিলম্বিত করে।

বর্তমানে, আমি পাওয়ারশেলের ইনভোক-কমান্ড সেমিডলেট ব্যবহার করি তবে এটি প্রতিটি হোস্টে ক্রমানুসারে কমান্ডটি চালায়। যেহেতু এই স্ক্রিপ্টটি চলতে মিষ্টি সময় লাগে (কখনও কখনও সার্ভারের জন্য কয়েক মিনিট কয়েক), আমি একবারে সমস্ত সার্ভারের সমান্তরালে কমান্ডটি চালিয়ে জিনিসগুলিকে দ্রুত করতে চাই।

ইনভোক-কমান্ড, যতদূর আমি বুঝতে পারি, এটি করতে পারে না। SysInternals এর psexec এটিও করতে পারে না।

আমি অস্পষ্টভাবে অবগত যে পাওয়ারশেলের একটি সমান্তরাল লুপিং সুবিধা রয়েছে যা লুপের একাধিক পুনরাবৃত্তি এক সাথে বিভিন্ন থ্রেডে চালিয়ে দিতে পারে। তবে ডকুমেন্টেশন বলে যে এটি কেবল একটি পাওয়ারশেল ওয়ার্কফ্লোতে উপলভ্য, যার সাথে আমি পরিচিত নই এবং এটির মতো শোনাচ্ছে এটি প্রচুর ওভারকিল।

ইউনিক্স-ওয়াই শেলটিতে, আমি পশ্চাদপটে psexec এর প্রতিটি আহবান চালাতে পারি। তবে আমার জানা মতে, পাওয়ারশেল এটিকে সমর্থন করে না। অথবা আমি জিএনইউ সমান্তরাল বা টিএস এর মতো সরঞ্জাম ব্যবহার করতে পারি।

উইন্ডোজ 7 মেশিনে এটি করার কোনও (সহজ) উপায় আছে?

অন্য সমস্ত কিছু যদি ব্যর্থ হয় তবে আমি পার্ল-স্ক্রিপ্ট বা অন্য কিছু লিখতে পারি তবে চাকাটি পুনরায় উদ্দীপনা কেন? নিশ্চয়ই আমি প্রথম ব্যক্তি নই যে এই সমস্যাটি দেখা দিয়েছে।


জিএনইউ সমান্তরাল এসএসএইচ ব্যবহারের ক্ষেত্রে পূর্বনির্ধারিত, সুতরাং আপনি এটির সাথে সংযোগ স্থাপনের জন্য অন্য কোনও সরঞ্জাম চালনা করতে না চাইলে সার্ভারগুলিতে আপনাকে একটি ssh- পরিষেবা চালানো দরকার।
ওলে টেঞ্জ

উত্তর:


5

সমান্তরালে একাধিক ইনভোক-কমান্ড চালানোর জন্য আপনি পাওয়ারশেল জবস ব্যবহার করতে পারেন। এটি কীভাবে ঠিক কাজ করে তা ইতিমধ্যে স্ট্যাক ওভারফ্লোতে ব্যাখ্যা করা হয়েছে: https://stackoverflow.com/questions/8781666/run-n-parallel-jobs-in-powershell

আমি আপনার রেফারেন্সের জন্য এটি এখানে অনুলিপি করছি, আপনার ব্যবহারের ক্ষেত্রে সামান্য অভিযোজিত:

স্টার্ট-জব সেমিডলেট আপনাকে পটভূমিতে কোড চালানোর অনুমতি দেয়।

foreach ($server in $servers) {
    $running = @(Get-Job | Where-Object { $_.State -eq 'Running' })
    if ($running.Count -le 8) {
        Start-Job {
             $list = Invoke-Command -FilePath .\file.ps1 -ComputerName <hostname>
             ...
        }
    } else {
         $running | Wait-Job
    }
    Get-Job | Receive-Job
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.