কার্ল ব্যবহার করে ওয়েব পৃষ্ঠার স্বাস্থ্য পরীক্ষা করা


34

আমি কোনও পরিষেবার একটি নির্দিষ্ট ইউআরএল কল করে একটি পরিষেবার স্বাস্থ্য পরীক্ষা করতে চাই। সহজ সমাধানটির মতো মনে হয় প্রতি মিনিট বা তার পরে পরীক্ষা করতে ক্রোন ব্যবহার করা। ত্রুটির ক্ষেত্রে ক্রোন আমাকে ইমেল প্রেরণ করে।

আমি এর জন্য সিআরএল ব্যবহার করার চেষ্টা করেছি কিন্তু আমি কেবল ত্রুটিযুক্ত আউটপুট বার্তায় এটি পেতে পারি না। যদি আমি / dev / নাল থেকে আউটপুট প্রত্যক্ষ করার চেষ্টা করি তবে এটি অগ্রগতি প্রতিবেদন ছাপে।

  % 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বা অন্য কোনও মনিটরিং সিস্টেম ব্যবহার করবেন ?
স্টাফেন চ্যাজেলাস

আমি এটি একটি শখের প্রকল্পে একটি ভাগ করা হোস্টের সীমিত সংস্থান সহ ব্যবহার করছি। আমি অন্যথায় একটি মনিটরিং সিস্টেম ব্যবহার করতে চাই। যাইহোক টিপটির জন্য ধন্যবাদ, আমি এর আগে আইসিংটার কথা শুনিনি
পল্টো

আমি উল্লেখ করতে চাই যে আপনি যদি আপনার অ্যাকাউন্টের সমস্ত পৃষ্ঠা খুব ঘন ঘন হিট করে থাকেন তবে ভাগ করে নেওয়ার হোস্টিং সরবরাহকারীরা এতে উদ্বিগ্ন হবে। সরবরাহকারীদের সাধারণত একযোগে প্রক্রিয়া সীমা এবং সর্বাধিক সম্পাদনের সময়সীমা থাকে। এছাড়াও আপনার এবং সরবরাহকারীর ডিসির মধ্যে যদি নেটওয়ার্ক আউটেজ থাকে তবে এই পদ্ধতিটি সঠিক হবে না। আপনার ভাগ করা অ্যাকাউন্টে ডোমেন অ্যাক্সেস লগগুলি অনুসন্ধান করা উচিত। সাধারণত বট এবং কেবল এলোমেলো দর্শনার্থীদের কাছ থেকে প্রচুর ট্র্যাফিক থাকে যা আপনার সাইটটি কতটা উপলভ্য তা আপনাকে একটি খুব ভাল ধারণা দেবে।
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
-এসএস কোনও কারণে ত্রুটি বার্তাকে আউটপুট দেয়নি। আমাকেও যোগ করতে হয়েছিল সঠিক ওয়ার্কিং কমান্ড বলে মনে হচ্ছে 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
স্থিতি কোড চেক করা অন্যান্য প্রস্তাবগুলির মতো সম্ভবত আরও বোধগম্য হয়
ডিউক্যাটকোডিং

আমি "HTTP / 1.1 302 পাওয়া" পেয়েছি।
স্পঞ্জ কমরেড

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

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

আমাকে সম্প্রতি এমন কিছু নিয়ে আসতে বলা হয়েছিল যা আরও পরিশীলিত হার্টবিটের মতো কাজ করবে would

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একটি ওয়েবসাইট, এইচটিএমএল থেকে সমস্ত লিঙ্কগুলি বিশ্লেষণ করে এবং তারপরে যুক্ত 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

নোট:

এই স্ক্রিপ্টটি কেবলমাত্র সাইটটিকে সমাধান করা যায় কিনা তা পরীক্ষা করে।

আপনি যে সমস্ত বিষয়ে যত্নশীল তা সাইটের উপরে বা নিচে থাকলে এই কোডটি আপনাকে পাওয়া উচিত।
তবে আপনি যদি / অন্য ব্লকে কিছু পরিবর্তন করে থাকেন তবে আপনি ইচ্ছে করলে অন্যান্য স্ট্যাটাস কোডের জন্য খুব সহজে পরীক্ষা করতে পারবেন

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