最近剛好需要測試一下建立站的穩定性,所以寫了個SHELL指令碼放到本機(最近換了mac本),能夠即時查看你需要監控的WEB頁面狀態,並發送到指定郵箱.
這裡贊一下OS X內建有crontab計劃任務,可以直接在本機測試指令碼啦^_^
代碼如下 |
複製代碼 |
# vi check_web_alive.sh --------------------------------------------------------------------- #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH # define url WEB_URL=("http://www.111cn.net" "http://m.111n.net" "http://www.111cn.net") # check network NET_ALIVE=$(ping -c 5 8.8.8.8 |grep 'received'|awk 'BEGIN {FS=","} {print $2}'|awk '{print $1}') if [ $NET_ALIVE == 0 ]; then echo "Network is not active,please check your network configuration!" exit 0 fi # check url for((i=0; i!=${#WEB_URL[@]}; ++i)) { ALIVE=$(curl -o /dev/null -s -m 10 -connect-timeout 10 -w %{http_code} ${WEB_URL[i]} |grep"000000") if [ "$ALIVE" == "000000" ]; then echo "'${WEB_URL[i]}' can not be open,please check!" | mail -s "Website Notification to ${WEB_URL[i]}" yourname@example.com echo "failed" else echo "'${WEB_URL[i]}' is OK!" fi } |
方法二,利用curl監控網頁shell指令碼
,因為此指令碼的作用是按固定頻率不停訪問給出的URL,當網站不可訪問時自動給設定郵箱發送警示郵件以通知使用者.好了.來看指令碼吧.
代碼如下 |
複製代碼 |
#!/bin/sh # */2 * * * * sh /var/monitor/web_monitor.sh http:///www.111cn.net # */2 * * * * sh /var/monitor/web_monitor.sh http:///www.111cn.net 5 # */2 * * * * sh /var/monitor/web_monitor.sh http:///www.111cn.net 10 export LANG=C URL="$1" EMAIL="rocdk890@gmail.com" # change for your mail address. LOG_FILE="/var/log/monitor/web_status_`date '+%Y%m'`.log" TMP_EMAIL="/var/monitor/.tmp.mail.`date '+%s'`" if [ $2 ] then sleep $2 fi # Define function "ECHO", append the timestamp at the head of every echo display. ECHO () { printf "%s " `date '+%Y-%m-%d %H:%M:%S'` echo $1 } # Define function HTTP_CODE, obtain the status of web service. HTTP_CODE () { http_code=`curl -m 10 -o /dev/null -s -w %{http_code} $URL` } # Define function MAIL. MAIL () { echo "$URL is not available now, pls pay attention." > $TMP_EMAIL echo "And the Server 's time is: " >> $TMP_EMAIL date >> $TMP_EMAIL echo >> $TMP_EMAIL echo "------" >> $TMP_EMAIL echo "BR" >> $TMP_EMAIL echo "Shell Robot." >> $TMP_EMAIL mail -s "Server Alert: $URL" $EMAIL < $TMP_EMAIL rm $TMP_EMAIL } n=0 HTTP_CODE if [ $http_code -eq 200 ] then ECHO "|http_code:200|+$n|webpage visit success.|$URL" >> $LOG_FILE else while [ $http_code -ne 200 ] do n=`expr $n + 1 ` ECHO "|http_code:$http_code|+$n|webpage visit failed. |$URL" >> $LOG_FILE if [ $n -eq 5 ]; then MAIL $1; exit 0 fi sleep 10 HTTP_CODE done fi # End.
|
使用Linux內建的curl工具訪問給出網址,並返回http_code,當http_code不等於200時即可認為網站存在訪問故障,但考慮到實際的不穩定因素,當第一次返回http_code不等200時,指令碼休眠10秒鐘,然後繼續訪問,累計連續不可訪問次數達到5次後觸發警示郵件.
使用方法:
指令碼後面需跟兩個參數:第一個參數為監控網站的URL,第二個參數為延時時間(可選,以秒為單位,建議在對多個網站進行監控時添加),將此指令碼添加到作業系統的crontab裡面,按需求設定運行頻率,建議2分鐘一次.若有多個網站需監控,在crontab裡面添加多行即可,每個URL一行,如下為同時對三個網站進行監控:
代碼如下 |
複製代碼 |
*/2 * * * * sh /var/monitor/web_monitor.sh http://www.111cn.net */2 * * * * sh /var/monitor/web_monitor.sh http://www.111cn.net 5 */2 * * * * sh /var/monitor/web_monitor.sh http://www.111cn.net 10 |
最簡單的辦法,沒測試過
linux shell curl命令擷取http狀態代碼
有時候在使用linux shell寫網站狀態監控的時候,希望通過判斷網站返回的頭資訊的狀態來判斷網站的狀態,使用以下命令即可解決:
curlShell
代碼如下 |
複製代碼 |
curl -I -m 10 -o /dev/null -s -w %{http_code} www.111cn.net |