一个简易的用于检测官网服务器前置网关是否正常工作的Python脚本

原创
2019/12/12 16:22
阅读数 350

        日前,我司在官网服务器前增加了一个前置网关。起因是央行通知我司必须在12月31前完成官网从IPv4到IPv6的升级,然而由于历史遗留原因,官网服务器上有多个服务组件直接使用IPv4地址(而不是域名)相互调用,如果贸然升级到IPv6,必然影响组件运行。综上,经过技术部研究决定,在官网服务器前增加一个IPv6前置网关,将官网域名的DNS映射到这个网关,再由这个网关转发所有的request和response到官网服务器,官网服务器的原IPv4地址保持不变。这样的话,既支持了IPv6,又兼容了IPv4。
        然而在实际操作中遇到了问题。由于前置IPv6网关和官网服务器是由两家第三方公司提供的服务(两次招投标,不同的公司中标),而两家公司在沟通中出现失误,导致前置网关的部分出网IP被官网服务器误认为是DDOS攻击者、阻止其访问,导致我司官网偶发的出现502 bad gateway页面。因此,在督促两家公司加快沟通的同时,作为甲方的我司也写了一个简易的Python定时脚本用于检测官网是否出现故障。原理很简单:每隔5分钟,访问一次官网,看页面是否正常。
        选择Python的原因无非是写起来快,而且正好我上星期刚开始学Python,正好拿这个练练手。程序逻辑非常直白,调用的都是Python内置函数,也没有什么高深的算法,纯粹是新手入门。代码贴出来就当是给自己写个日记,记录一下这是我写的第一个在生产系统中正式运行的Python程序。
        目前国内正在推动IPv6的普及,相信近期应该有很多公司都遇到过我司这种情况。代码贴出来,需要的直接复制粘贴拿去用。

from urllib.request import urlopen
import time

url = urlopen
time_format = "%Y-%m-%d %H:%M:%S"

# 连接官网首页并判断页面源码中是否含有“××有限公司”字符,若无,则表示网站崩溃(此时是502页面)
def test() :
	for line in url('http://www.example.com') :
		line = line.decode('utf-8')
		if '××有限公司' in line :
			return True
	return False
	
# 执行定时任务
def run() :
	global time_format
	while True :
		sleep_time = 300 # 定时任务睡眠时间,默认每300秒查询一次官网
		try :
			 if not test() :
				 sleep_time = 30 # 若发现网站崩溃,则每隔30秒查询一次
				 ftime = time.strftime(time_format, time.localtime())
				 with open('C:\\Users\\AL\\Desktop\\err.log', 'a') as f :
					 f.write('website error! ' + ftime + '\n')
		except :
			ftime = time.strftime(time_format, time.localtime())
			print('program error! ' + ftime)
			continue
		else :
			time.sleep(sleep_time)

if __name__ == '__main__' :
	run()

 

展开阅读全文
0 评论
0 收藏
0
分享
返回顶部
顶部