जवाबों:
एक सर्वर कनेक्शन स्वीकार कर रहा है या नहीं यह देखने के लिए सबसे अच्छा परीक्षण वास्तव में कनेक्ट करने का प्रयास करना है। आपके सर्वर ने जो भी प्रोटोकॉल बोला है उसके लिए एक नियमित क्लाइंट का उपयोग करें और नो-ऑप कमांड का प्रयास करें।
यदि आप एक हल्के टीसीपी या यूडीपी ग्राहक चाहते हैं तो आप केवल शेल से ड्राइव कर सकते हैं, नेटकैट का उपयोग कर सकते हैं । कैसे बातचीत करने के लिए प्रोटोकॉल पर निर्भर करता है; कई प्रोटोकॉल सर्वर पर एक निश्चित इनपुट पर कनेक्शन बंद कर देते हैं, और netcat तब बाहर निकल जाएगा।
while ! echo exit | nc localhost 13000; do sleep 10; done
आप कनेक्शन स्थापित करने के बाद बाहर निकलने के लिए नेटकैट भी बता सकते हैं। यदि कनेक्शन नहीं है तो यह 1 लौटाता है और यदि ऐसा है तो हम इसके आउटपुट को नकार देते हैं। Netcat के आपके संस्करण के आधार पर, यह निम्नलिखित में से एक या दोनों आदेशों का समर्थन कर सकता है:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
एक वैकल्पिक दृष्टिकोण एक सुनने का सॉकेट खोलने के लिए सर्वर प्रक्रिया की प्रतीक्षा करना है।
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
यदि आप Mac OS पर हैं, तो netstat थोड़ा अलग आउटपुट स्वरूप का उपयोग करता है, इसलिए आप निम्नलिखित जानकारी चाहते हैं:
while netstat -lnt | awk '$4 ~ /\.13000$/ {exit 1}'; do sleep 10; done
या आप एक विशिष्ट प्रक्रिया आईडी को लक्षित करना चाह सकते हैं:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
मैं सॉकेट को सुनने के लिए शुरू होने वाली प्रक्रिया पर प्रतिक्रिया करने के लिए किसी भी तरीके के बारे में नहीं सोच सकता (जो कि एक मतदान दृष्टिकोण से बचना होगा) का उपयोग करने से कम ptrace
।
nc -w 2 </dev/null >/dev/null
- यदि कनेक्शन 2 सेकंड से अधिक समय लेता है, तो यह समय से बाहर हो जाता है और विफल रहता है - जो मेरे उपयोग के लिए आसान है।
nc -q 1 localhost 13000 </dev/null
कोई सर्वर नहीं सुन रहा है, तो तुरंत वापस आ जाता है, लेकिन यह एक त्रुटि कोड के साथ लौटता है, इसलिए लूप इसे सोता है और कुछ सेकंड बाद फिर से कोशिश करता है।
यदि आपके पास बैश और कोरुटिल्स हैं (उदाहरण के लिए टाइमआउट, स्लीप), लेकिन nc / lsof / netstat नहीं, तो आप इस समाधान का उपयोग कर सकते हैं जो बैश मैजिक tcp सॉकेट का उपयोग करता है:
while ! timeout 1 bash -c "echo > /dev/tcp/localhost/13000"; do sleep 10; done
टीसीपी सॉकेट्स जादू के साथ पिछले उदाहरण के बाद bash
, यहां एक बढ़ाया संस्करण है जो सीमित समय के दौरान कनेक्शन की प्रतीक्षा करता है।
timeout 15 bash -c 'until echo > /dev/tcp/localhost/13000; do sleep 0.5; done'
अंतर यह है कि यदि कनेक्शन के दौरान उपलब्ध नहीं था 15s
, - यह हमेशा के लिए लूप नहीं करेगा, लेकिन त्रुटि कोड के साथ बाहर निकल जाएगा।
स्टार्टअप के बाद सेवा की तत्परता / उपलब्धता की प्रतीक्षा करने के लिए यह init स्क्रिप्ट के लिए उपयोगी है।