状态码基本类型:
100-199 用于指定客户端应相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。
500-599 用于支持服务器错误。
我这个监控主要是监控网站首页的状态码200,这个简单一点,没有301跳转啊什么的。虽然有zabbix监控,但感觉自己写的一个还是挺简单的。就是根据上一篇的linux监控python程序扩展了一下。用之前先检查一下看看要监控的web的状态码是不是200啊!我这是有三台阿里云的网站,所以用了一个for循环三个网站的首页地址。
#/usr/bin/env python
# -*- coding: utf-8 -*-
import os,sys
import smtplib
import fcntl
import struct
import pycurl
import string
list=["http://www.xxx","http://xxx/forum.php","http://xxx/index.html","http://xxxx/"]
for URL in list:
c = pycurl.Curl()
c.setopt(pycurl.URL, URL)
indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt", "wb")
c.setopt(pycurl.WRITEHEADER, indexfile)
c.setopt(pycurl.WRITEDATA, indexfile)
try:
c.perform()
except Exception,e:
print "connecion error:"+str(e)
indexfile.close()
c.close()
sys.exit()
HTTP_CODE = c.getinfo(c.HTTP_CODE)
print "HTTP状态码:%s" % (HTTP_CODE)#这一句可以不要,调试用的
HOST = "smtp.qq.com"
SUBJECT = "网站服务状态信息"
TO = "[email protected]"
FROM = "[email protected]"
text = "网站挂了快跑啊 http server is down"
BODY = string.join((
"From: %s" % FROM,
"To: %s" % TO,
"Subject: %s" % SUBJECT ,
"",
text
),"\r\n")
def sendemail():
server = smtplib.SMTP()
server.connect(HOST,"25")
server.starttls()
server.login("[email protected]","password")
if HTTP_CODE != 200:
server.sendmail(FROM, [TO], BODY)
server.quit()
else:
print "http server is ok"
if __name__ == ‘__main__‘:
sendemail()
为了发邮件测试我特别加了一个有跳转的网页,哇咔咔!Game over