कर्ल का उपयोग करके वेब पेज की स्वास्थ्य जांच


34

मैं इस पर एक विशिष्ट यूआरएल को कॉल करके किसी सेवा की स्वास्थ्य जांच करना चाहता हूं। ऐसा लगता है कि सबसे सरल समाधान क्रोन का उपयोग हर मिनट या तो जांच करने के लिए होगा। त्रुटियों के मामले में, क्रोन मुझे एक ईमेल भेजता है।

मैंने इसके लिए cUrl का उपयोग करने की कोशिश की, लेकिन मैं इसे केवल त्रुटियों पर संदेश आउटपुट करने के लिए प्राप्त नहीं कर सकता। यदि मैं आउटपुट को सीधे / dev / null करने की कोशिश करता हूं, तो यह प्रगति रिपोर्ट को प्रिंट करता है।

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5559  100  5559    0     0   100k      0 --:--:-- --:--:-- --:--:--  106k

मैंने कर्ल विकल्पों के माध्यम से देखने की कोशिश की, लेकिन मैं अभी उस स्थिति के अनुरूप कुछ भी नहीं पा सकता हूं जहां आप चाहते हैं कि यह सफलता पर चुप हो लेकिन त्रुटियों पर शोर करें।

क्या कर्ल बनाने का एक तरीका है जो मैं चाहता हूं या क्या कोई अन्य उपकरण है जिसे मुझे देखना चाहिए?


2
कैसे का उपयोग कर icingaया किसी अन्य निगरानी प्रणाली के बारे में?
स्टीफन चेजालस

मैं एक साझा होस्ट पर सीमित संसाधनों के साथ एक शौक परियोजना पर इसका उपयोग कर रहा हूं। मुझे अन्यथा एक निगरानी प्रणाली का उपयोग करना अच्छा लगेगा। टिप के लिए धन्यवाद वैसे भी, मैं नहीं icinga के पहले सुना था
palto

मैं यह बताना चाहूंगा कि यदि आप अपने खाते के सभी पृष्ठों को बहुत अधिक बार मार रहे हैं, तो शेयर होस्टिंग प्रदाता इस पर ध्यान नहीं देंगे। प्रदाता आमतौर पर समवर्ती प्रक्रिया सीमाएँ और अधिकतम निष्पादन समय सीमाएँ हैं। यदि प्रदाता और प्रदाता के बीच एक नेटवर्क आउटेज है, तो भी यह विधि सटीक नहीं होगी। आपको अपने साझा खाते पर डोमेन एक्सेस लॉग की जांच करनी चाहिए। आमतौर पर बॉट्स और बस रैंडम विजिटर्स से बहुत ट्रैफिक होता है जो आपको बहुत अच्छा आइडिया देगा कि आपकी साइट कितनी उपलब्ध है।
rcjohnson

जवाबों:


39

किस बारे में -sSf? आदमी पृष्ठों से:

  -s/--silent
     Silent or quiet mode. Do not show progress meter or error messages.  
     Makes Curl mute.

  -S/--show-error
     When used with -s it makes curl show an error message if it fails.

  -f/--fail
     (HTTP)  Fail silently (no output at all) on server errors. This is mostly
     done to better enable scripts etc to better deal with failed attempts. In
     normal  cases  when a HTTP server fails to deliver a document, it returns
     an HTML document stating so (which often also describes  why  and  more).
     This flag will prevent curl from outputting that and return error 22.

     This method is not fail-safe and there are occasions where non-successful
     response codes will  slip  through,  especially  when  authentication  is
     involved (response codes 401 and 407).

उदाहरण के लिए:

curl -sSf http://example.org > /dev/null

3
-SS किसी कारण के लिए त्रुटि संदेश का उत्पादन नहीं किया। मुझे -f भी जोड़ना था। सही काम करने वाली कमान लगती है curl -fsS http://example.org > /dev/null। जब कुछ भी गलत नहीं होगा, तो यह कुछ भी आउटपुट नहीं करेगा, लेकिन यह उन त्रुटियों पर स्थिति कोड प्रिंट करेगा जो मेरे द्वारा ठीक हैं।
palto

1
ठीक है, -fभविष्य के संदर्भों के लिए जोड़ा गया ।
आहिल

10

मुझे लगता है कि साइट जीवित है या नहीं यह जांचने के सबसे सरल तरीके के लिए, आप निम्नलिखित विधि का उपयोग कर सकते हैं:

curl -Is http://www.google.com | head -n 1

यह लौट आएगा HTTP/1.1 200 OK। यदि रिटर्न आपके आउटपुट से मेल नहीं खाता है तो मदद के लिए कॉल करें।


1
स्टेटस कोड की जाँच करना शायद अन्य प्रस्तावों की तरह अधिक समझ में आता है
Dukeatcoding

मुझे "HTTP / 1.1 302 मिला"।
स्पंज कॉमरेड

1
यह बहुत अच्छा है क्योंकि यह एक पिंग से परे जाता है जो मुझे यह देखने के लिए जांचने की अनुमति देता है कि क्या मेरी साइट सही तरीके से लोड हो रही है (mySQL आदि) और अधिक सार्थक परिणाम प्राप्त करें।
नाथन

8

आपको -sध्वज (मौन), -fध्वज की आवश्यकता है (त्रुटि पर निकास कोड के साथ विफल) और -oध्वज का उपयोग आउटपुट को पुनर्निर्देशित कर सकता है :

curl www.websiteToTest.com -s -f -o /dev/null || echo "Website down." | mail -s "Website is down" admin@thesite.com 

यह एक साधारण क्रोन स्क्रिप्ट के लिए सिर्फ एक बुरा उदाहरण है। आम तौर पर, आप केवल एक मेल प्राप्त करना चाहते हैं यदि कोई वेबसाइट नीचे है।


8

आप कर्ल से नेटवर्क टाइमिंग आँकड़े कैप्चर कर सकते हैं। अनुरोध / प्रतिक्रिया चक्र में प्रत्येक चरण की विलंबता स्वास्थ्य को निर्धारित करने के लिए उपयोगी हो सकती है।

$ URL=https://example.com
$ curl "$URL" -s -o /dev/null -w \
> "response_code: %{http_code}\n
> dns_time: %{time_namelookup}
> connect_time: %{time_connect}
> pretransfer_time: %{time_pretransfer}
> starttransfer_time: %{time_starttransfer}
> total_time: %{time_total}
> "
response_code: 200

dns_time: 0.029
connect_time: 0.046
pretransfer_time: 0.203
starttransfer_time: 0.212
total_time: 0.212

2

जब https मौजूद हो तो साइट का परीक्षण करने का प्रयास करने पर यह तरीका आपकी मदद करेगा:

#!/bin/bash
# put your domain in this var
https=https://www.somewebsite.com

# save the status in some variable 
status=`curl $https -k -s -f -o /dev/null && echo "SUCCESS" || echo "ERROR"`    

# print results (or use it in your scripts)
echo "testing $https=$status"

1

मुझे हाल ही में एक ऐसी चीज के साथ आने के लिए कहा गया है जो एक परिष्कृत दिल की धड़कन की तरह काम करेगी।

for i in `curl -s -L cnn.com |egrep --only-matching "http(s?):\/\/[^ \"\(\)\<\>]*" | uniq` ; do curl -s -I $i 2>/dev/null |head -n 1 | cut -d$' ' -f2; done

या, थोड़ी अधिक पठनीयता के लिए विस्तारित,

for i in $(curl -s -L cnn.com |egrep --only-matching 'http(s?):\/\/[^ \"\(\)\<\>]*' | uniq)
do
    curl -s -I "$i" 2>/dev/null | head -n 1 | cut -d' ' -f2
done

मैंने जो किया वह curlएक वेबसाइट थी, html से सभी लिंक को curlपार्स किया , और फिर उन पार्स लिंक को केवल स्टेटस कोड आउटपुट किया। फिर मैं http स्टेटस कोड> = 400 में त्रुटियों को खोजने के लिए खोज करूंगा।


1

उत्तर:

#!/bin/bash -eu
timeout 3s curl -fIsS http://example.org > /dev/null
# and if you have TLS (https), check if it's about to expire:
true | openssl s_client -connect example.org:443 2>/dev/null | openssl x509 -noout -checkend "$((3600*24*20))"

स्पष्टीकरण:

  • timeout 3sआपके अनुरोध के लिए 3-सेकंड का समय निर्धारित करेगा। धीमी गति से उत्तर देना "स्वस्थ नहीं" होना है।
  • कर्ल -fध्वज जल्दी विफल हो जाएगा, -Sत्रुटियों को दिखाएगा, -sसामान्य आउटपुट -Iको दबाएगा, केवल HTTP हेडर लाएगा, सामग्री नहीं। (हमेशा की तरह, अधिक विवरण man curlकमांड पर उपलब्ध हैं ।)
  • -checkendएक सर्टिफिकेट के लिए एक्सप्लस डेट्स को ओपन करता है। मेरे उदाहरण में, यह 20 दिन (सेकंड में निर्दिष्ट) है।

मुझे लगता है कि आप के स्पष्टीकरण है -sऔर -Sबदली
nafg

1

कर्ल में बहुत विशिष्ट निकास स्थिति कोड होते
हैं, केवल उन लोगों के लिए ही जांच क्यों?

#!/bin/bash

##name: site-status.sh

FAIL_CODE=6

check_status(){
    LRED="\033[1;31m" # Light Red
    LGREEN="\033[1;32m" # Light Green
    NC='\033[0m' # No Color


    curl -sf "${1}" > /dev/null

    if [ ! $? = ${FAIL_CODE} ];then
        echo -e "${LGREEN}${1} is online${NC}"
    else
        echo -e "${LRED}${1} is down${NC}"
    fi
}


check_status "${1}"

उपयोग:

$ site-status.sh example.com

परिणाम:

$ example.com is online

टिप्पणियाँ:

यह स्क्रिप्ट केवल यह जांचती है कि साइट को हल किया जा सकता है या नहीं।

यदि आप जिस साइट की देखभाल कर रहे हैं उसके ऊपर या नीचे होने से यह कोड आपको प्राप्त करना चाहिए।
हालाँकि, यदि आप if / else ब्लॉक में कुछ बदलाव करते हैं, तो आप चाहें तो आसानी से अन्य स्टेटस कोड के लिए परीक्षण कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.