দূরবর্তী সার্ভারগুলিতে ঘটে যাওয়া ক্রিয়াকলাপগুলির অগ্রগতি প্রদর্শন করতে কীভাবে "অগ্রগতি-বার.শ" ব্যবহার করবেন


-1

আমার এসএসএইচ ওভার রিমোট সার্ভারের ক্রিয়াকলাপে একটি অগ্রগতি বারকে সংহত করতে হবে।

আমার পরিস্থিতিতে বেশ কয়েকটি লুপ রয়েছে যা এসএসএইচ-এর কয়েকটি রিমোট সার্ভারগুলিতে প্রক্রিয়াগুলি ট্রিগার করে। এই প্রক্রিয়াগুলির সাথে ট্রিগার করা হচ্ছে certainFunctionএবং 10 থেকে 60 মিনিটের মধ্যে সময় লাগে (অনেকগুলি অনাকাঙ্ক্ষিত জিনিসের উপর নির্ভর করে)। যতক্ষণ না প্রক্রিয়াগুলি একটি প্রধান সার্ভার থেকে নিয়ন্ত্রিত হয়, আমি সময় বা সময় বা বার (নট বা স্পিনার) এর উপর ভিত্তি করে কিছু অগ্রগতি বার প্রদর্শন করতে চাই যা সামগ্রিক অগ্রগতি নির্দেশ করে।

এটা কি সম্ভব?

কিছু অযৌক্তিক সমাধানের সন্ধান করে আমি পেয়েছি Éঅর্ডার্ড লোপেজের progress-bar.shপ্রকল্পটি আমার প্রয়োজনের জন্য উপযুক্ত।

এর জন্য কোডটি এখানে progress-bar.sh:

progress-bar() {
  local duration=${1}


    already_done() { for ((done=0; done<$elapsed; done++)); do printf "▇"; done }
    remaining() { for ((remain=$elapsed; remain<$duration; remain++)); do printf " "; done }
    percentage() { printf "| %s%%" $(( (($elapsed)*100)/($duration)*100/100 )); }
    clean_line() { printf "\r"; }

  for (( elapsed=1; elapsed<=$duration; elapsed++ )); do
      already_done; remaining; percentage
      sleep 1
      clean_line
  done
  clean_line
}

এটি কি আমার পরিস্থিতির জন্য ব্যবহার করা যেতে পারে? আমি একটি খাঁটি বাশ সমাধান খুঁজছি যা কোনও অতিরিক্ত প্যাকেজ ইনস্টল করা নেই।


2
তাই আপনি অনেকগুলি অনির্দেশ্য জিনিসের উপর নির্ভর করে যেগুলি 10 থেকে 60 মিনিটের মধ্যে লাগে তার সময়সীমার ভিত্তিতে সামগ্রিক অগ্রগতি বার পেতে চান ? একটি একক প্রক্রিয়া (পৃথক সত্তা হিসাবে) তার চালিত পূর্বাভাস সময়কাল বা অগ্রগতি বা এটি যখন চালায় তখন কী জানেন? এবং এটি আপনার কাছে এটি রিপোর্ট করতে পারে? যদি তা না হয় তবে আমি ভয় করি যে অনুমান করার জন্য আপনার একটি মানসিক প্রয়োজন $duration; বিশেষত যখন অনেক অপ্রত্যাশিত জিনিস থাকে। সম্ভবত আপনি যে সেরা অগ্রগতি সূচকটি পেতে পারেন তা হ'ল "এম টাস্কগুলির এন এন" এর মতো।
কামিল ম্যাকিয়েরোস্কি

এম এর এন খুব ভাল লাগছে! আমি কীভাবে এটিকে পেতে পারি? অ্যারেতে থাকা উপাদানগুলির পরিমাণ আমি জানি এবং প্রক্রিয়া শেষ করার ইভেন্টগুলি ধরলাম।
অবিরাম

এই দূরবর্তী কাজগুলি ট্রিগার করতে আপনি স্থানীয়ভাবে কোন সঠিক আদেশ (গুলি) চালাচ্ছেন?
কামিল ম্যাকিয়েরোস্কি

সমস্ত কমান্ড (rsync, ssh, exec ...) একত্রে 'ফাংশন' এর সাথে যুক্ত হয়ে 'for' লুপ (অ্যারে থেকে আইপি গ্রহণ করে) শেষে 'অপেক্ষা' করে। তাই বর্তমানে কেবল "চালু যুগপত আপগ্রেড" এর শিরা মধ্যে গত মুদ্রণ, এবং ওয়েটিং তত্কালীন শুধু বিরক্তিকর সময়
পরিচয়হীন

আপনার অ্যারে থেকে আইপি সংখ্যা অর্জন করুন এবং আপনার ফাংশনগুলি ফিড করুন: progress-bar ${#arrayOfIPaddresses[@]}এবং sleepআদেশের পরিবর্তে আপনার আসল কোডটি চালান
অ্যালেক্স

উত্তর:


0

একটি অগ্রগতি বার লেখা সহজ; এটা আপনার সমস্যা নয়। আপনি ব্যবহার করতে পারেন

declare -i progress
progress=1
declare -i width
width=$(tput cols)-10
declare -i pbarlength


prt_bar(){
    pbarlength=$((width*progress/100))
    echo -en "\r"
    for i in `seq $pbarlength` ; do
        echo -n '='
    done
    echo -en " $progress   "

}

বা এই জাতীয় কিছু

মূল সমস্যাটি হ'ল আপনার অগ্রগতি কী তা নির্ধারণ করা। আপনি যদি সময়ের সাথে এটি করার চেষ্টা করেন তবে আপনি অবশ্যই অগ্রগতির মিথ্যা অনুভূতি পাবেন, কারণ প্রক্রিয়াটি (আমি উদ্ধৃত): 10 থেকে 60 মিনিটের মধ্যে সময় নেয় (অনেকগুলি অনাকাঙ্ক্ষিত জিনিসের উপর নির্ভর করে)।

যদি এটি কেবল সময় ভিত্তিক হয় তবে আপনি ব্যবহার করতে পারেন:

while [ $progress -lt 100 ] ; do
    progress=$((progress+1))
    prt_bar
    sleep 10
done
echo 
echo done

তবে আপনার যদি প্রক্রিয়াগুলি কীভাবে অগ্রগতি হয় তার একটি পরিমাপ না থাকে এবং আপনি প্রকৃত অগ্রগতির একটি বাস্তবিক অনুমান সরবরাহ করতে সক্ষম না হন তবে এটি একটি অগ্রগতি বার সরবরাহ করা অযথা। আপনার পছন্দসই উইন্ডো ম্যানেজারের ক্লক উইজেট যতটা প্রাসঙ্গিক তথ্য সরবরাহ করবে।

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