Python實現(xiàn)的檢測web服務(wù)器健康狀況的小程序
對web服務(wù)器做健康檢查,一般我們都是用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庫的,另外還有一些關(guān)于http的模塊,例如perl的LWP,python的httplib,urllib或者urllib2 也可以去實現(xiàn),今天就走的比較低級一些,就使用socket方式來進行一次檢測:
#!/usr/bin/env python
#coding=utf8
"""
使用socket方式來檢查服務(wù)器的監(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):
"""
該方法也是該類的主要方法,包括構(gòu)建請求資源,解析返回結(jié)果等
"""
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()
#設(shè)置連接超時時間
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 "關(guān)閉連接"
s.close()
line = StringIO(response).readline()
try:
(http_version,status,messages) = re.split(r'\s+',line,2)
except ValueError:
print "分割響應(yīng)碼失敗"
return False
print "返回的狀態(tài)碼是%s" %(status)
if status in ['200','301','302']:
print "服務(wù)器的監(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面向?qū)ο笾甒eb靜態(tài)服務(wù)器
- python實現(xiàn)靜態(tài)web服務(wù)器
- Python Web服務(wù)器Tornado使用小結(jié)
- python創(chuàng)建一個最簡單http webserver服務(wù)器的方法
- Python 搭建Web站點之Web服務(wù)器與Web框架
- python制作websocket服務(wù)器實例分享
- Python基于twisted實現(xiàn)簡單的web服務(wù)器
- Python Web程序部署到Ubuntu服務(wù)器上的方法
- Python實現(xiàn)簡易版的Web服務(wù)器(推薦)
- python3實現(xiàn)微型的web服務(wù)器
相關(guān)文章
python中的循環(huán)結(jié)構(gòu)問題
這篇文章主要介紹了python中的循環(huán)結(jié)構(gòu)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
python Web應(yīng)用程序測試selenium庫使用用法詳解
selenium主要是用來做自動化測試,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題本文詳細介紹了在python中selenium模塊的使用方法2021-10-10
python 子類調(diào)用父類的構(gòu)造函數(shù)實例
這篇文章主要介紹了python 子類調(diào)用父類的構(gòu)造函數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python調(diào)用Orator?ORM進行數(shù)據(jù)庫操作
Orator?ORM?是一個功能豐富且靈活的?Python?ORM庫,旨在簡化數(shù)據(jù)庫操作,它支持多種數(shù)據(jù)庫并提供了簡潔且直觀的?API,下面我們就來看看它的具體使用吧2025-02-02
Python使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖
日常工作、生活中我們經(jīng)常會遇到一些復(fù)雜的事務(wù)關(guān)系,比如人物關(guān)系,那如何才能清楚直觀的看清楚這些任務(wù)關(guān)系呢?所以小編給大家介紹了Python如何使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下2023-11-11

