কীভাবে ব্যাশে এমন একটি লুপ তৈরি করবেন যা কোনও ওয়েবসভারটির প্রতিক্রিয়া অপেক্ষা করছে?


106

কীভাবে ব্যাশে এমন একটি লুপ তৈরি করবেন যা কোনও ওয়েবসভারটির প্রতিক্রিয়া অপেক্ষা করছে?

এটি একটি "মুদ্রণ করা উচিত।" প্রতি 10 সেকেন্ড বা তারপরে এবং সার্ভারটি সাড়া না দেওয়া পর্যন্ত অপেক্ষা করুন।

আপডেট করুন, সার্ভারের কাছ থেকে আমি যদি ভাল সাড়া পাই তবে এই কোডটি পরীক্ষা করে।

যদি কার্ল - আউটপুট / দেব / নাল - নিরব - মাথা --fail "$ url"; তারপর
  প্রতিধ্বনি "ইউআরএল বিদ্যমান: l url"
অন্য
  প্রতিধ্বনি "ইউআরএল বিদ্যমান নেই: l url"
ফাই

আপনি কীভাবে সার্ভারের প্রতিক্রিয়া জানাতে অপেক্ষা করছেন সে সম্পর্কে আরও নির্দিষ্ট করে বলতে পারেন?
চিপনার

আমি বিবেচনা করব যে সার্ভারটি প্রস্তুত নয়, যতক্ষণ এটি উত্তর দেয় না বা 200 জবাবের চেয়ে আলাদা কিছু দিয়ে উত্তর দেয়।
sorin

উত্তর:


177

চিপনারের উত্তরের সাথে প্রশ্নের সংমিশ্রণ, এটি আমার পক্ষে কাজ করেছে:

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
    printf '.'
    sleep 5
done

10
ব্যাকটিক্স `of এর ব্যবহার পুরানো$( )পরিবর্তে ব্যবহার করুন।
সার্জ স্ট্রোব্যান্ড

6
ছোড় আগে সর্বোচ্চ অপেক্ষা সময় অনুমতি দেয় একটি চমৎকার এক্সটেনশন হতে চান
tkruse

তোমার দরকার কেন --head?
অভিধান 10

4
@ অ্যালেক্সিকোর যেহেতু শরীরটি এই আদেশের জন্য আকর্ষণীয় নয়, আমরা কেবলমাত্র মাথাকে অনুরোধ করি (যদিও আপনি সার্ভারের অবস্থা সম্পর্কে আরও স্টাফ পরীক্ষা করতে যুক্তি অন্তর্ভুক্ত করতে পারেন)। বাইরে --headবেরোনোর ​​ফলে কোনও পরিবর্তন হবে না, তবে আপনি যদি প্রতিক্রিয়ার বিষয়বস্তুগুলিতে (স্ট্যাটাস html এর মতো) কিছু যুক্তি ব্যবহার করতে চান তবে আপনি করতে পারেন।
থমাস ফেরিস নিকোলাইসেন

4
আমার একটি নির্দিষ্ট কেস ছিল যেখানে ব্যবহার করে --headসর্বদা ফিরে আসত 405। এটি কাজ করতে এটি অপসারণ করতে হয়েছিল
রন হারলেভ

43

আমি সর্বাধিক প্রচেষ্টার সীমাবদ্ধ করতে চেয়েছিলাম। টমাসের গৃহীত উত্তরের ভিত্তিতে আমি এটি করেছি:

attempt_counter=0
max_attempts=5

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
    if [ ${attempt_counter} -eq ${max_attempts} ];then
      echo "Max attempts reached"
      exit 1
    fi

    printf '.'
    attempt_counter=$(($attempt_counter+1))
    sleep 5
done

আমি যুক্ত করার পরামর্শ দিচ্ছি --max-time 5যদি কোনও কারণে লিঙ্কের
সময়টি

16

https এ জন্য দুর্দান্ত। সরল, পরিষ্কার, শান্ত

while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done

যখন / পর্যন্ত ইত্যাদি ব্যক্তিগত উপস্থাপক।


4
দ্বিতীয় চিন্তায়, চিরকালের জন্য দীর্ঘ সময় ... for i in সেক 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
ব্রুস এজ


0

আকর্ষণীয় ধাঁধা আপনার ক্লায়েন্টের সাথে যদি আপনার অ্যাক্সেস বা অ্যাসিঙ্ক এপিআই না থাকে, আপনি নিজের টিসিপি সকেটগুলি এভাবে গ্রেপ করার চেষ্টা করতে পারেন:

until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
  printf '.'
  sleep 1
done

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


-1

যদি আপনার সার্ভারটি উপলভ্য আছে কিনা, কারণ পুনরায় আরম্ভ হচ্ছে বা অন্য কোনও কিছুর দরকার আছে কিনা আপনি সার্ভারে একটি উইজেট তৈরি করতে এবং প্রতিক্রিয়া বা ত্রুটিটি পার্স করার চেষ্টা করতে পারেন, যদি আপনি 200 বা একটি 404 পেয়ে থাকেন তবে সার্ভারটি আপ রয়েছে, আপনি - টাইমআউট = সেকেন্ডের সাহায্যে উইজেটের সময়সীমা পরিবর্তন করতে পারে, আপনি টাইমআউটটি 10 ​​সেকেন্ডে সেট করতে পারেন এবং প্রতিক্রিয়ার উপরে গ্রেপের ফলাফল না পাওয়া পর্যন্ত একটি লুপ তৈরি করতে পারেন।

আপনি কী অনুসন্ধান করছেন বা সত্যই আপনার বাশ কোড দরকার তা আমি জানি না।

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