Python实现的检测web服务器健康状况的小程序


Posted in Python onSeptember 17, 2014

对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\r\nHost:%s\r\n\r\n" %(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()

看下效果

Python实现的检测web服务器健康状况的小程序

Python 相关文章推荐
分享一下Python 开发者节省时间的10个方法
Oct 02 Python
Python中元组,列表,字典的区别
May 21 Python
Python实现的下载网页源码功能示例
Jun 13 Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
解决pytorch 保存模型遇到的问题
Mar 03 Python
python写的一个squid访问日志分析的小程序
Sep 17 #Python
python进程管理工具supervisor使用实例
Sep 17 #Python
Python实现备份文件实例
Sep 16 #Python
Python多进程编程技术实例分析
Sep 16 #Python
Python专用方法与迭代机制实例分析
Sep 15 #Python
跟老齐学Python之有容乃大的list(3)
Sep 15 #Python
跟老齐学Python之有容乃大的list(2)
Sep 15 #Python
You might like
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python递归下载文件夹下所有文件
2019/08/31 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
应届毕业生求职信范例分享
2013/12/17 职场文书
酒店总经理助理职责
2014/02/12 职场文书
军训学生自我鉴定
2014/02/12 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
详解Java实现数据结构之并查集
2021/06/23 Java/Android