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的鸭子类型
Sep 12 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python基于scipy实现信号滤波功能
May 08 Python
Django利用cookie保存用户登录信息的简单实现方法
May 27 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
python中使用input()函数获取用户输入值方式
May 03 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
如何让python的运行速度得到提升
Jul 08 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 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结合飞信 免费天气预报短信
2009/05/07 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
python pandas生成时间列表
2019/06/29 Python
python logging模块的使用总结
2019/07/09 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
客户经理岗位职责
2013/12/08 职场文书
工作自我评价怎么写
2014/01/29 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python