Python實現(xiàn)的檢測web服務器健康狀況的小程序
更新時間:2014年09月17日 12:09:42 作者:鄉(xiāng)村運維
這篇文章主要介紹了Python實現(xiàn)的檢測web服務器健康狀況的小程序,本文使用socket庫來實現(xiàn),需要的朋友可以參考下
對web服務器做健康檢查,一般我們都是用curl庫(不管是php,perl的還是shell的),大致的方法一致:
復制代碼 代碼如下:
curl -I -s www.qq.com |head -1|awk '{ health = $2=="200"?"server is ok":"server is bad"}END{print health}'
server is ok
說白了這些方式都是封裝了curl庫的,另外還有一些關于http的模塊,例如perl的LWP,python的httplib,urllib或者urllib2 也可以去實現(xiàn),今天就走的比較低級一些,就使用socket方式來進行一次檢測:
#!/usr/bin/env python
#coding=utf8
"""
使用socket方式來檢查服務器的監(jiān)控狀況
"""
from optparse import OptionParser
import socket
import sys
import re
from StringIO import StringIO
class check_server:
"""
該類主要是利用socket建立一個連接以后,發(fā)送一個http請求,然后根據(jù)返回的狀態(tài)碼,判斷主機的健康狀況
"""
def __init__(self,address,port,resource):
self.address = address
self.port = port
self.resource = resource
def check(self):
"""
該方法也是該類的主要方法,包括構建請求資源,解析返回結果等
"""
if not self.resource.startswith('/'):
self.resource = '/' + self.resource
request = "GET %s HTTP/1.1\r\nHost:%s\r\n\r\n" %(self.resource,self.address)
#建立一個socket連接
s = socket.socket()
#設置連接超時時間
s.settimeout(10)
print "現(xiàn)在開始對 %s 上的 %s 端口連接......" %(self.address,self.port)
try:
s.connect((self.address,self.port))
print "連接 %s 上端口 %s 成功" %(self.address,self.port)
s.send(request)
response = s.recv(100)
except socket.error,e:
print "連接%s 上端口 %s 失敗 ,原因為:%s" %(self.address,self.port,e)
return False
finally:
print "關閉連接"
s.close()
line = StringIO(response).readline()
try:
(http_version,status,messages) = re.split(r'\s+',line,2)
except ValueError:
print "分割響應碼失敗"
return False
print "返回的狀態(tài)碼是%s" %(status)
if status in ['200','301','302']:
print "服務器的監(jiān)控狀況良好"
else:
print "乖乖,趕快上線看看,咋回事"
if __name__ == '__main__':
"""
處理參數(shù)
"""
parser =OptionParser()
parser.add_option("-a","--address",dest="address" ,default='localhost',help="要檢查主機的地址或者主機名")
parser.add_option('-p','--port',dest="port",type=int,default=80,help="要檢查主機的端口")
parser.add_option('-r','--resource',dest="resource",default="/",help="要檢查的資源,比如")
(options,args) = parser.parse_args()
#開始檢測鳥
checks = check_server(options.address,options.port,options.resource)
checks.check()
看下效果

相關文章
python Web應用程序測試selenium庫使用用法詳解
selenium主要是用來做自動化測試,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題本文詳細介紹了在python中selenium模塊的使用方法2021-10-10
Python調用Orator?ORM進行數(shù)據(jù)庫操作
Orator?ORM?是一個功能豐富且靈活的?Python?ORM庫,旨在簡化數(shù)據(jù)庫操作,它支持多種數(shù)據(jù)庫并提供了簡潔且直觀的?API,下面我們就來看看它的具體使用吧2025-02-02
Python使用Networkx實現(xiàn)復雜的人物關系圖
日常工作、生活中我們經(jīng)常會遇到一些復雜的事務關系,比如人物關系,那如何才能清楚直觀的看清楚這些任務關系呢?所以小編給大家介紹了Python如何使用Networkx實現(xiàn)復雜的人物關系圖,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下2023-11-11

