হোস্টটি নেটওয়ার্কের সাথে সংযুক্ত রয়েছে কিনা সে সম্পর্কে দ্রুত প্রতিক্রিয়া পেতে পিং দুর্দান্ত but এটি কারণ পিং প্রতিক্রিয়াগুলি সাধারণত কার্নেল দ্বারা পরিচালিত হয়, সুতরাং এমনকি যদি সিস্টেমের প্রতিটি অ্যাপ্লিকেশন ক্রাশ হয়ে যায় (যেমন একটি ডিস্ক ব্যর্থতার কারণে বা স্মৃতি থেকে বেরিয়ে যায়) তবে আপনি প্রায়শই পিং প্রতিক্রিয়া পাবেন এবং মেশিনটি ধরে নিতে পারে পরিস্থিতি সম্পূর্ণ বিপরীত যখন সাধারণত অপারেটিং।
পরিষেবাগুলি পরীক্ষা করা হচ্ছে
সাধারণত আপনি কোনও হোস্ট এখনও অনলাইনে আছেন কি না তা সত্যিই যত্নশীল হন না, আপনি যা সম্পর্কে সত্যই যত্নশীল তা হ'ল মেশিনটি এখনও কিছু কাজ করছে কিনা। সুতরাং আপনি যদি সরাসরি কাজটি পরীক্ষা করতে পারেন তবে আপনি জানতে পারবেন হোস্ট উভয়ই আপ এবং এটি এখনও টাস্কটি চলছে।
দূরবর্তী হোস্টের জন্য যা একটি ওয়েব সার্ভার উদাহরণস্বরূপ চালায়, আপনি এর মতো কিছু করতে পারেন:
# Add the -f option to curl if server errors like HTTP 404 should fail too
if curl -I "http://$TARGET"; then
echo "$TARGET alive and web site is up"
else
echo "$TARGET offline or web server problem"
fi
যদি এটি এসএসএইচ চালায় এবং পাসওয়ার্ডহীন লগইনের জন্য আপনার কীগুলি সেট আপ করা থাকে, তবে আপনার কাছে আরও কয়েকটি বিকল্প রয়েছে, উদাহরণস্বরূপ:
if ssh "$TARGET" true; then
echo "$TARGET alive and accessible via SSH"
else
echo "$TARGET offline or not accepting SSH logins"
fi
এটি হোস্টের মধ্যে এসএসএচ'ইং দ্বারা এবং true
কমান্ডটি চালিয়ে এবং তারপরে সংযোগটি বন্ধ করে কাজ করে। ssh
কমান্ডটি কেবল তখনই সাফল্য ফিরিয়ে আনবে যদি সেই আদেশটি সফলভাবে চালানো যায়।
এসএসএইচ মাধ্যমে রিমোট পরীক্ষা
আপনি নির্দিষ্ট প্রক্রিয়াগুলি পরীক্ষা করার জন্য এটি প্রসারিত করতে পারেন, যেমন mysqld
মেশিনে চলছে তা নিশ্চিত করে :
if ssh "$TARGET" bash -c 'ps aux | grep -q mysqld'; then
echo "$TARGET alive and running MySQL"
else
echo "$TARGET offline or MySQL crashed"
fi
অবশ্যই monit
এক্ষেত্রে পরিষেবাটি চলমান রাখা নিশ্চিত করার লক্ষ্যে আপনি টার্গেটের মতো কিছু চালিয়ে যাওয়া ভাল তবে এটি স্ক্রিপ্টগুলিতে কার্যকর যেখানে আপনি কেবল মেশিন এ-তে কিছু কাজ সম্পাদন করতে চান যতক্ষণ না মেশিন বি এর জন্য প্রস্তুত থাকে ।
এটি লক্ষ্য করা যায় যে টার্গেট মেশিনটিতে এটি সম্পাদন rsync
করার আগে একটি নির্দিষ্ট ফাইল সিস্টেম স্থাপন করা হয়েছে যাচাই করার মতো কিছু হতে পারে , যাতে কোনও কারণে সেকেন্ডারি ফাইল সিস্টেমটি মাউন্ট না করা হয় তবে আপনি ঘটনাক্রমে এর প্রধান ডিস্কটি পূরণ করবেন না। উদাহরণস্বরূপ এটি /mnt/raid
চালিয়ে যাওয়ার আগে লক্ষ্য মেশিনে মাউন্ট করা আছে তা নিশ্চিত করবে ।
if ssh "$TARGET" bash -c 'mount | grep -q /mnt/raid'; then
echo "$TARGET alive and filesystem ready to receive data"
else
echo "$TARGET offline or filesystem not mounted"
fi
কোন ক্লায়েন্ট সঙ্গে পরিষেবা
কখনও কখনও পরিষেবার সাথে সংযোগ করার কোনও সহজ উপায় নেই এবং আপনি কেবল এটি দেখতে চান যে এটি আগত টিসিপি সংযোগগুলি গ্রহণ করে কিনা, তবে আপনি যখন telnet
প্রশ্নে বন্দরের লক্ষ্যবস্তুতে পৌঁছান তখন এটি কেবল সেখানে বসে এবং আপনাকে সংযোগ বিচ্ছিন্ন করে না, যার অর্থ এটি করা কোনও স্ক্রিপ্টে এটি স্তব্ধ হয়ে যায়।
যদিও খুব পরিষ্কার নয়, আপনি এখনও প্রোগ্রাম timeout
এবং netcat
প্রোগ্রামগুলির সাহায্যে এটি করতে পারেন । উদাহরণস্বরূপ, এটি পরীক্ষা করে দেখুন যে মেশিনটি টিসিপি পোর্ট ৪৪৫-তে এসএমবি / সিআইএফএস সংযোগ গ্রহণ করে কিনা, আপনি দেখতে পাচ্ছেন যে লগ ইন করার পাসওয়ার্ড না থাকলেও এটি উইন্ডোজ ফাইল ভাগ করে চলছে কিনা, বা সিআইএফএস ক্লায়েন্ট সরঞ্জামগুলি না রয়েছে ' টি ইনস্টল করা:
# Wait 1 second to connect (-w 1) and if the total time (DNS lookups + connect
# time) reaches 5 seconds, assume the connection was successful and the remote
# host is waiting for us to send data. Connecting on TCP port 445.
if echo 'x' | timeout --preserve-status 5 nc -w 1 "$TARGET" 445; then
echo "$TARGET alive and CIFS service available"
else
echo "$TARGET offline or CIFS unavailable"
fi