पिंग महान है कि मेजबान नेटवर्क से जुड़ा है या नहीं, इस बारे में त्वरित प्रतिक्रिया प्राप्त करने के लिए बहुत अच्छा है, लेकिन यह अक्सर आपको यह नहीं बताएगा कि मेजबान जीवित है या नहीं, या क्या यह अभी भी उम्मीद के मुताबिक काम कर रहा है। ऐसा इसलिए है क्योंकि आमतौर पर पिंग प्रतिक्रियाओं को कर्नेल द्वारा नियंत्रित किया जाता है, इसलिए भले ही सिस्टम का प्रत्येक एप्लिकेशन क्रैश हो गया हो (जैसे डिस्क में खराबी या मेमोरी से बाहर चलने के कारण), आपको अक्सर पिंग प्रतिक्रियाएं मिलेंगी और मशीन मान सकती है। जब स्थिति काफी विपरीत होती है तो सामान्य रूप से संचालन होता है।
जाँच सेवाएँ
आमतौर पर आप वास्तव में परवाह नहीं करते हैं कि एक मेजबान अभी भी ऑनलाइन है या नहीं, क्या आप वास्तव में परवाह करते हैं कि क्या मशीन अभी भी कुछ कार्य कर रही है। इसलिए यदि आप सीधे कार्य की जांच कर सकते हैं तो आपको पता चल जाएगा कि मेजबान दोनों तैयार है और यह कार्य अभी भी चल रहा है।
उदाहरण के लिए वेब सर्वर चलाने वाले दूरस्थ होस्ट के लिए, आप कुछ इस तरह से कर सकते हैं:
# 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
यदि यह SSH चलाता है और आपके पास पासवर्ड रहित लॉगिन के लिए कुंजी है, तो आपके पास कुछ और विकल्प हैं, उदाहरण के लिए:
if ssh "$TARGET" true; then
echo "$TARGET alive and accessible via SSH"
else
echo "$TARGET offline or not accepting SSH logins"
fi
यह SSH'ing द्वारा होस्ट में काम करता है और true
कमांड चलाता है और फिर कनेक्शन को बंद करता है। ssh
आदेश केवल सफलता वापस आ जाएगी कि अगर आदेश सफलतापूर्वक चला जा सकता है।
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
कार्यक्रमों की मदद से ऐसा कर सकते हैं। उदाहरण के लिए यह देखने के लिए कि क्या मशीन TCP पोर्ट 445 पर SMB / CIFS कनेक्शन स्वीकार करती है, इसलिए आप देख सकते हैं कि क्या यह Windows फ़ाइल साझाकरण चला रहा है, भले ही आपके पास लॉग इन करने के लिए कोई पासवर्ड न हो, या CIFS क्लाइंट टूल उत्पन्न न हों ' टी स्थापित:
# 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