जवाबों:
मेरे लिए fping काम नहीं आया ... मेरे मामले में, ज्यादातर समय मैं इसे मूल रूप से सर्वर रिबूटिंग के दौरान देखना चाहता हूं ... यह विंडोज पर बहुत अच्छा काम करता है ...
मैं उस पर मेरी मदद करने के लिए एक सरल स्क्रिप्ट (@entropo उत्तर का विस्तार) का निर्माण करता हूं, जो इस प्रश्न का उत्तर देने में मदद कर सकता है:
https://gist.github.com/brunobraga/7259197
#!/bin/bash
host=$1
if [ -z $host ]; then
echo "Usage: `basename $0` [HOST]"
exit 1
fi
while :; do
result=`ping -W 1 -c 1 $host | grep 'bytes from '`
if [ $? -gt 0 ]; then
echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;31mdown\033[0m"
else
echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;32mok\033[0m -`echo $result | cut -d ':' -f 2`"
sleep 1 # avoid ping rain
fi
done
और उपयोग कुछ इस तरह है:
मुझे मिली सबसे अच्छी बात -O ध्वज का उपयोग करना था (ध्यान दें कि यह सभी डिस्ट्रोस पर काम नहीं करता है - लिनक्स टकसाल 17.1 का उपयोग करके रेबेका IPUTILS-PING 3: 20121221-4ubuntu1.1)
$ ping -O 10.10.5.1
64 bytes from 10.10.5.1: icmp_seq=53 ttl=245 time=460 ms
no answer yet for icmp_seq=54
64 bytes from 10.10.5.1: icmp_seq=55 ttl=245 time=265 ms
64 bytes from 10.10.5.1: icmp_seq=56 ttl=245 time=480 ms
no answer yet for icmp_seq=57
64 bytes from 10.10.5.1: icmp_seq=58 ttl=245 time=348 ms
64 bytes from 10.10.5.1: icmp_seq=59 ttl=245 time=515 ms
no answer yet for icmp_seq=60
64 bytes from 10.10.5.1: icmp_seq=61 ttl=245 time=320 ms
64 bytes from 10.10.5.1: icmp_seq=62 ttl=245 time=537 ms
मैन पेज से:
-O Report outstanding ICMP ECHO reply before sending next packet.
This is useful together with the timestamp -D to log output to a
diagnostic file and search for missing answers.
ping
; डेबियन व्हीज़ी पर मुझे " ping: invalid option -- 'O'
" मिलता है , लेकिन जेसी पर यह आपके ध्यान में रखते हुए काम करता है। आप इस जानकारी को शामिल करने के लिए अपने उत्तर को अपडेट करना चाह सकते हैं। (मैंने आउटपुट और मैनपेज से जानकारी के लिए
जब मैं यह देखने के लिए पिंग का उपयोग करता हूं कि क्या कोई होस्ट शेल स्क्रिप्ट में है, तो मैं ऐसा कुछ करता हूं:
ping -W 1 -c 1 $HOST 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-host-to-be-up
मूल रूप से, एक आउटपुट के साथ एक सेकंड में एक बार ICMP भेजता है और आगे की कार्रवाई के लिए गेट से बाहर निकलने के कोड का उपयोग करता है।
ऐसा करने के लिए आम के लिए कोई रास्ता नहीं ping
है। यदि आप कुछ ऐसा करने की कोशिश कर रहे हैं तो आपके पास कुछ विकल्प हैं:
ping -c 2 <ip>
RESULT=$?
echo $RESULT
1
यदि पिंग विफल होता है, $?
तो 1 होगा, यदि पिंग सफल है, $?
तो 0 होगा।
दूसरा विकल्प fping
सिस्को की तरह काम करता है ping
:
$ fping 200.1.1.1
200.1.1.1 is unreachable
$ fping 192.168.1.1
192.168.1.1 is alive
Bruno.braga द्वारा ऊपर दी गई स्क्रिप्ट ठीक काम करती है, हालाँकि व्यक्तिगत रूप से मैं शेल प्रोफ़ाइल में एक उपनाम का उपयोग करना पसंद करता हूं (जैसे .bashrc) ताकि यह दैनिक उपयोग का मामला बन सके।
नीचे दिया गया मेरा समाधान भी ECHO अनुरोध क्रम संख्या की स्वचालित रूप से गणना करता है:
alias pingt='__pingt() { s=0; while :; do s=$(($s+1)); result=$(ping $1 -c1 -W1 |/bin/grep from) && echo "$result, seq=$s" && sleep 1 || echo timeout; done }; __pingt $1'
यहां आउटपुट उदाहरण है जब होस्ट टाइमआउट के साथ अस्थिर है:
$ pingt 10.10.10.126
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.235 ms, seq=1
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.228 ms, seq=2
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.209 ms, seq=3
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.241 ms, seq=4
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.195 ms, seq=5
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.211 ms, seq=6
timeout
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.267 ms, seq=8
64 bytes from 10.10.10.126: icmp_req=1 ttl=64 time=0.232 ms, seq=9
^C
बेशक, दोष यह है: सीटीआरएल-सी दबाए जाने पर अंत में कोई आंकड़े नहीं। यदि वांछित है, तो यह शेल स्क्रिप्ट द्वारा न्यूनतम / औसत / अधिकतम की गणना करना भी संभव होगा, महादेव गुंजाइश से परे है।
मुझे डर है लेकिन मानक पिंग के साथ इसका कोई 100% समाधान नहीं है। यहां तक कि क्रिया- आउटपुट के लिए पिंग -v के साथ टाइमिंग के मामले में पिंग चुप हो जाएगा। आप उपयोग करने की कोशिश कर सकते हैं:
ping -w 2 192.168.199.1
PING 192.168.199.1 (192.168.199.1) 56(84) bytes of data.
--- 192.168.199.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1007ms
यह 2 सेकंड के बाद पिंग करना बंद कर देगा और फिर पैकेट की संख्या को प्रेषित और पैकेट हानि को दिखाएगा। एक अन्य विकल्प होगा कि आप mtr का उपयोग करें ।
nomad@local:~$ fping -l -e 8.8.8.8
8.8.8.8 : [0], 92 bytes, 183 ms (183 avg, 0% loss)
8.8.8.8 : [1], 92 bytes, 61.4 ms (122 avg, 0% loss)
8.8.8.8 : [2], 92 bytes, 164 ms (136 avg, 0% loss)
8.8.8.8 : [3], 92 bytes, 163 ms (143 avg, 0% loss)
8.8.8.8 : [5], 92 bytes, 158 ms (146 avg, 16% loss)
8.8.8.8 : [6], 92 bytes, 122 ms (142 avg, 14% loss)
8.8.8.8 : [7], 92 bytes, 134 ms (141 avg, 12% loss)
8.8.8.8 : [8], 92 bytes, 130 ms (140 avg, 11% loss)
nomad@local:~$ fping -version
fping: Version 3.2
fping: comments to david@schweikert.ch
fping
अच्छा है, और BTW -e
आवश्यक नहीं है जब है -l
या -c
जोड़ा जाता है, सिर्फ इस्तेमाल कर सकते हैं fping -l 8.8.8.8
, उत्पादन में ही है।
मुझे वास्तव में ब्रूनो से शेल स्क्रिप्ट पसंद है। मैंने सभी विफलताओं के साथ एक फ़ाइल बनाने के लिए एक पंक्ति जोड़ी।
इको-ई " date +'%Y/%m/%d %H:%M:%S'
- मेजबान $ मेजबान \ 033 [0; 31mdown \ 033 [0m" >>//ostostpackets.txt है।
बिना किसी स्क्रिप्ट के
ping -f -i 1 hostname
लाभ : मानक लिनक्स कमांड - इंस्टॉल या स्क्रिप्ट के लिए कुछ भी नहीं।
नुकसान :
एक न्यूनतम स्क्रिप्ट के साथ
#!/bin/bash
while :; do
ping -W1 -c 1 "$@" | grep 'bytes from '
case $? in
0 ) sleep 1 ;;
1 ) echo -e "request timeout" ;;
* ) exit ;;
esac
done
नुकसान : आपको अंत में कोई आंकड़े नहीं मिलते हैं और आप इन 3 पिंग विकल्पों का उपयोग नहीं कर सकते हैं:
-i
पैकेट भेजने के बीच के अंतराल को बदलने के लिए (यह 1sec के लिए हार्डकोड है)-W
टाइमआउट को बदलने के लिए (यह 1sec के लिए हार्डकोड है)-c
एन पैकेट भेजने के बाद रोकनाBTW: यह कार्यक्षमता का एक अत्यंत दुर्लभ उदाहरण है जिसे मैं वास्तव में लिनक्स सीएलआई टूल से याद करता हूं, लेकिन मुझे विंडोज़ टूल मिलता है। जैसा कि वे कहते हैं कि क्रियान्वयन नियम साबित करता है :-)
यदि आप खिड़कियों की तरह निरंतर पिंग करना चाहते हैं और टाइमस्टैम्प के साथ, यह प्रयोग करें। 192.168.0.1
अपने खुद के आईपी पते से बदलने के लिए स्वतंत्र महसूस करें
while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done
उदाहरण उत्तर ठीक है
[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.1 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done
Wed Jan 3 03:41:49 GMT 2018 >>> Reply OK
Wed Jan 3 03:41:50 GMT 2018 >>> Reply OK
Wed Jan 3 03:41:51 GMT 2018 >>> Reply OK
^Z
[23]+ Stopped sleep 1
[user@Linux ~]$
उदाहरण अनुरोध समय समाप्त हो गया
[user@Linux ~]$ while :; do ping -c 1 -t 1 192.168.0.254 > /dev/null && echo "`date` >>> Reply OK" && sleep 1 || echo "`date` >>> Request timed out"; done
Wed Jan 3 03:41:36 GMT 2018 >>> Request timed out
Wed Jan 3 03:41:37 GMT 2018 >>> Request timed out
Wed Jan 3 03:41:38 GMT 2018 >>> Request timed out
^Z
[22]+ Stopped ping -c 1 -t 1 192.168.0.254 >/dev/null
[user@Linux ~]$
सामान्य पिंग वास्तव में आपको टाइमआउट दिखाता है। पिंग्स के बीच seq = value देखकर आप बता सकते हैं कि कितने टाइमआउट हैं
64 bytes from 192.168.12.46: icmp_seq=8 ttl=62 time=46.7 ms
64 bytes from 192.168.12.46: icmp_seq=11 ttl=62 time=45.3 ms
ईजी 3 समय बाहरी 2 पिंग्स के बीच उत्पन्न हुआ क्योंकि पहला एक था seq=8
और दूसरा एक seq=11
(9 और 10 समय बाहरी थे)
seq=sequence
।