今日練習(xí)題
【需求】
寫一個監(jiān)控腳本,監(jiān)控某站點訪問是否正常。
提示:
1)可以將訪問的站點以參數(shù)的形式提供,例如
sh xxx.sh www.aminglinux.com2)狀態(tài)碼為2xx或者3xx表示正常
3)正常時echo正常,不正常時echo不正常
【分析】
1)腳本是帶有參數(shù)的,第一個參數(shù)就是要訪問的站點URL,傳遞的第一個參數(shù),在腳本里用$1表示;
2)獲取站點狀態(tài)碼,使用curl工具。其中curl的-I參數(shù)只獲取header信息,里面就包含狀態(tài)碼。例如:
curl -I 'www.aminglinux.com' HTTP/1.1 301 Moved Permanently Server: nginx Date: Fri, 02 Dec 2022 0337 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive Location:http://www.apelearn.com/從結(jié)果中可以看到,我們想要的狀態(tài)碼就在第一行。所以,可以將curl的執(zhí)行結(jié)果通過管道符進一步處理。但在這兒有個問題,curl的結(jié)果一旦加上管道符后,那么就會多出來一個如下內(nèi)容的輸出
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0162000000--:--:----:--:----:--:--0這個內(nèi)容屬于錯誤輸出內(nèi)容,需要做一下處理,加一個 2>/dev/null即可。
另外curl訪問一個有問題的URL時,時間比較久,所以有必要給它加一個超時時間,比如設(shè)置為3秒,這樣能保證即使這個URL有問題也能在3秒內(nèi)執(zhí)行完成。
code=`curl --connect-timeout 3 -I $1 2>/dev/null |grep 'HTTP'|awk '{print $2}'`
最終拿到狀態(tài)碼,需要做對比,看是否是2xx或者3xx。我的方法是使用grep做正則匹配:
echo $code |grep -qE '^2[0-9][0-9]|^3[0-9][0-9]'
【參考答案】
#!/bin/bash if ! which curl &>/dev/null then echo "本機沒有安裝curl" yum install -y curl if ! which curl &>/dev/null then echo "沒有安裝成功curl" exit 1 fi fi code=`curl --connect-timeout 3 -I $1 2>/dev/null |grep 'HTTP'|awk '{print $2}'` if echo $code |grep -qE '^2[0-9][0-9]|^3[0-9][0-9]' then echo "$1訪問正常" else echo "$1訪問不正常" fi
審核編輯:湯梓紅
-
監(jiān)控
+關(guān)注
關(guān)注
6文章
2311瀏覽量
56876 -
腳本
+關(guān)注
關(guān)注
1文章
397瀏覽量
28369
原文標(biāo)題:監(jiān)控你的站點訪問是否正常
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
是否有可能讀取ESP當(dāng)前連接到的站點的RSSI?
支持全球探測點的新一代網(wǎng)站監(jiān)控
本地站點網(wǎng)格作業(yè)監(jiān)控模塊的設(shè)計和實現(xiàn)
迅馳本本發(fā)熱巨大是否正常
微軟Chromium Edge用戶可快速訪問站點
基于組態(tài)軟件的分布式站點數(shù)據(jù)監(jiān)控方案
基于RFID的訪問控制和監(jiān)控系統(tǒng)

評論