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自动化测试之setUp与tearDown实例
Sep 28 Python
开始着手第一个Django项目
Jul 15 Python
python使用代理ip访问网站的实例
May 07 Python
python 获取字符串MD5值方法
May 29 Python
pycham查看程序执行的时间方法
Nov 29 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
python设置随机种子实例讲解
Sep 12 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
ThinkPHP之getField详解
2014/06/20 PHP
php文件下载处理方法分析
2015/04/22 PHP
php中JSON的使用方法
2015/04/30 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
Python查询IP地址归属完整代码
2017/06/21 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
Django中的Model操作表的实现
2018/07/24 Python
python树莓派红外反射传感器
2019/01/21 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
自荐信模版
2013/10/24 职场文书
大学毕业后的十年规划
2014/01/07 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
基于Python实现nc批量转tif格式
2022/08/14 Python