সমস্যাটি
সমস্যাটি আপনি সেট করেছেন -w 0.2
। যখন মান 1 এর নীচে হয়, সময়সীমা ( -w
) এবং সময়সীমা ( -W
) মানগুলি অগ্রাহ্য করা হয়। এই প্রশ্নের আগে এটি উল্লেখ করা হয়েছে । আপনি যখন ব্যবহার করবেন তখন -w 1
আপনার স্ক্রিপ্ট (যা আমি অকেজো বিটগুলি অপসারণ করতে সামান্য সংশোধন করেছি) সঠিকভাবে কাজ করে:
$ ./ping_server.sh
waiting for ServerXY ....................
Server is back online
$ cat ./ping_server.sh
#!/bin/bash
printf "%s" "waiting for ServerXY ..."
while ! ping -c 1 -n -w 1 147.153.237.192 &> /dev/null
do
printf "%c" "."
done
printf "\n%s\n" "Server is back online"
সমাধান
সুস্পষ্ট সমাধানটি ব্যবহার করা -w 1
। যদি আপনি 1 সেকেন্ডের চেয়ে কম মান ব্যবহার করতে চান তবে timeout
কমান্ডটি আরও ভাল হওয়া উচিত:
$ timeout 0.2 ping -c 1 147.153.237.192
PING 147.153.237.192 (147.153.237.192) 56(84) bytes of data.
64 bytes from 147.153.237.192: icmp_seq=1 ttl=124 time=2.61 ms
--- 147.153.237.192 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.612/2.612/2.612/0.000 ms
আবার !
এটি লুপটিতে অপারেটরের সাথে ব্যবহার করুন :
#!/bin/bash
printf "%s" "waiting for ServerXY ..."
while ! timeout 0.2 ping -c 1 -n 147.153.237.192 &> /dev/null
do
printf "%c" "."
done
printf "\n%s\n" "Server is back online"
অবশ্যই সার্ভারটি আপ থাকলে বার্তা প্রদর্শন করতে প্রয়োগ করা যেতে পারে এবং সার্ভার ডাউন হলে রিপোর্ট করা যায়, উদাহরণস্বরূপ:
$ while ping -q -c 1 172.16.127.2 >/dev/null ; do sleep 1; done ; echo "Server stopped responding"
Server stopped responding
তবে খেয়াল করুন, এটি নিখুঁত নয়:
আমরা প্রতি সেকেন্ডে মাত্র 1 প্যাকেট দিয়ে পিং করছি। লো ব্যান্ডউইদথ, দুর্বল সংযোগ, সার্ভার এবং ক্লায়েন্টের পিংয়ের মধ্যে থাকা হার্ড হার্ডওয়্যারটি লুপটি প্রস্থান করতে এবং মিথ্যা ইতিবাচক বিজ্ঞপ্তিটি তৈরি করবে
আমরা পিংংয়ের উপর নির্ভর করছি, এটি আইসিএমপি ইকো ব্যবহার করছে। ফায়ারওয়ালস এমনকি স্বতন্ত্র সার্ভারগুলি পিং / আইসিএমপি প্রতিধ্বনির প্রতিক্রিয়াগুলিকে অবরুদ্ধ করে। আপনি ব্যবহার করতে পারে nc
এর ncat
(এর একটি উন্নত সংস্করণ যা nc
)। উপরের লুপের মতো কিছু ঠিকঠাক পরিবর্তে কাজ করবে ping
:
nc -w5 -z 172.16.127.2 80
এটি যা করবে তা 802 পোর্টের 172.16.127.2 এ সার্ভারের সাথে সংযুক্ত রয়েছে -z
I I / O এড়ানো - কেবল সংযোগ স্থাপন এবং সংযোগ বিচ্ছিন্ন করা। -w
ব্যর্থ সংযোগের রিপোর্ট করার আগে 5 সেকেন্ড অপেক্ষা করতে হবে। অবশ্যই যখন আপনি আপনার নিয়ন্ত্রণে থাকা সার্ভার রাখেন এবং আপনি জানেন যে 80 বন্দরটি উন্মুক্ত রয়েছে এটি অবশ্যই বেশ ভাল। ইউপিডি সূক্ষ্মভাবে ব্যবহার করা যেতে পারে, তবে জায়গায় ফায়ারওয়াল থাকলে, টিসিপি সম্ভবত পছন্দনীয়।
এখানে একটি গোপন সুবিধা হ'ল যদি আপনার নির্দিষ্ট বন্দরটিতে কিছু পরিষেবা চলমান থাকে (যেমন 80 র বন্দরের HTTP বা 554-তে RTSP), পোর্টের সাথে সংযোগ স্থাপনে ব্যর্থ হতে পারে তবে আপনার পরিষেবাটি পুনরায় আরম্ভের প্রয়োজন।
অবশ্যই, nc
এবং ping
কিছুটা স্প্যামিও হতে পারে। আরও ভাল উপায় হ'ল অন্য কেন্দ্রীয় সার্ভারের সাথে সার্ভার চেক-ইন করা, পর্যায়ক্রমিক প্রতিবেদন পাঠানো, সম্ভবত প্রতি ঘন্টা; যদি আপনার সার্ভার কোনও "পাঞ্চ সময়" মিস করে তবে আপনি ত্রুটি তৈরি করতে পারেন। নাগিওসের মতো পরিষেবা ব্যবহার করা সবচেয়ে ভাল উপায় which তবে এই মুহুর্তে আমরা একাধিক সার্ভারের সাথে এন্টারপ্রাইজ-স্তরীয় কম্পিউটিংয়ের ক্ষেত্রের মধ্যে চলেছি। আপনার যদি বাড়িতে রাস্পবেরি পাই এর মতো কিছু থাকে তবে আপনার সম্ভবত জটিল কিছু দরকার নেই।