视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python实现的检测web服务器健康状况的小程序
2020-11-27 14:31:00 责编:小采
文档
对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 也可以去实现,今天就走的比较低级一些,就使用socket方式来进行一次检测:

#!/usr/bin/env python
#coding=utf8
 
"""
使用socket方式来检查服务器的监控状况
"""
 
from optparse import OptionParser
 
import socket
 
import sys
 
import re
 
from StringIO import StringIO
 
class check_server:
 """
 该类主要是利用socket建立一个连接以后,发送一个http请求,然后根据返回的状态码,判断主机的健康状况
 """
 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
Host:%s

" %(self.resource,self.address)
 
 #建立一个socket连接
 
 s = socket.socket()
 #设置连接超时时间
 s.settimeout(10)
 
 print "现在开始对 %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 "返回的状态码是%s" %(status)
 
 if status in ['200','301','302']:
 
 print "服务器的监控状况良好"
 else:
 
 print "乖乖,赶快上线看看,咋回事"
 
 
if __name__ == '__main__':
 """
 处理参数
 """
 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()

看下效果

下载本文
显示全文
专题