শেল কমান্ড / স্ক্রিপ্ট দেখতে কোনও হোস্ট বেঁচে আছে কি না?


9

আমি প্রদত্ত হোস্টটি পুরোপুরি শেল কমান্ড (প্রাথমিকভাবে বাশ) ব্যবহার করে কিনা তা দেখার জন্য আরও উপায়গুলি জানার চেষ্টা করছি। আদর্শভাবে, এটি হোস্টনাম এবং আইপি উভয় ঠিকানার সাথে কাজ করতে সক্ষম হবে। এই মুহূর্তে আমার জানা একমাত্র নেটিভ উপায় হ'ল পিং, সম্ভবত এখানে বর্ণিত হিসাবে কোনও স্ক্রিপ্টে সংহত করা হয়েছে। অন্য কোন ধারণা?

উত্তর:


7

ping হয় পরীক্ষা উপায় কিনা একটি হোস্ট জীবিত এবং সংযুক্ত করা হয়। (কোনও হোস্ট যদি জীবিত তবে সংযোগ বিচ্ছিন্ন বা প্রতিক্রিয়া করতে ধীর হয়ে থাকে, তবে আপনি এটি মারা যাওয়ার থেকে আলাদা করতে পারবেন না))

pingকমান্ড দ্বারা সমর্থিত বিকল্পগুলি সিস্টেম থেকে সিস্টেমে পরিবর্তিত হয়। আপনি এটি নিশ্চিত করতে চাইবেন যে এটি চিরতরে লুপ না করে তবে কোনও উত্তর না পেলে কয়েক সেকেন্ড পরে ফিরে আসে।

ফ্রিবিএসডি এবং লিনাক্স iputils সহ, ping -c 1 -W 1 >/dev/nullএকটি একক পিং পাঠায় এবং 1 সেকেন্ড অপেক্ষা করুন। আপনাকে আউটপুট পার্স করার দরকার নেই: কমান্ডটি যদি পিং ব্যাক এবং ননজারো না পেয়ে থাকে তবে 0 ফিরে আসে (অজানা হোস্টের নাম, হোস্টের কোনও রুট নেই, কোনও উত্তর নেই)। কিছু বাস্তবায়নের জন্য পৃথক পতাকা প্রয়োজন হতে পারে (যেমন ফ্রিবিএসডি এর -wপরিবর্তে -W) আপনার সিস্টেমে ম্যানুয়ালটি পরীক্ষা করে।

if ping -c 1 -W 1 "$hostname_or_ip_address"; then
  echo "$hostname_or_ip_address is alive"
else
  echo "$hostname_or_ip_address is pining for the fjords"
fi

আমি জানি যে এটিই উপায়, আমি কেবল আশা করছিলাম যে এটি একমাত্র উপায় নয়, এমনকি অন্য উপায়গুলি অদ্ভুত বা চঞ্চল বা আপনার কী আছে। আচ্ছা ভালো!
ব্যবহারকারী 67459

2
এই উত্তরটি উত্তর হিসাবে চিহ্নিত করা উচিত নয় answered। ওপি বিশেষত এই more ways to see if a given host is upব্যতীত অন্যদের জন্য জিজ্ঞাসা করেছিল ping, যা এই উত্তর সরবরাহ করে না।
ইয়োকাই

'পিং' ম্যান পৃষ্ঠা থেকে:"Because of the load it can impose on the network, it is unwise to use ping during normal operations or from automated scripts."
1111161171159459134

@ 1111161171159459134 এই অনুচ্ছেদে আরও ভাল শব্দ করা যেতে পারে। এটি অতিরিক্ত মাত্রায় অ্যালার্মিস্ট। আপনার খুব উচ্চ হারের সাথে বন্যার পিংস বা পিংগুলি করা উচিত নয়, তবে একটি পিং প্যাকেট এখন এবং তারপরে নগণ্য।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

2

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