2019年09月08日 11:33 阅读量:1982
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from redis import ConnectionPool, Redis
import requests
import json
import logging
from logging import handlers
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class Logger(object):
level_relations = {
'debug':logging.DEBUG,
'info':logging.INFO,
'warning':logging.WARNING,
'error':logging.ERROR,
'crit':logging.CRITICAL
}#日志级别关系映射
#def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
def __init__(self,filename,level='info',when='midnight',backCount=3,fmt='%(asctime)s - %(levelname)s: %(message)s'):
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(fmt)#设置日志格式
self.logger.setLevel(self.level_relations.get(level))#设置日志级别
#sh = logging.StreamHandler()#往屏幕上输出
#sh.setFormatter(format_str) #设置屏幕上显示的格式
th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件里写入#指定间隔时间自动生成文件的处理器
#实例化TimedRotatingFileHandler
#interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
# S 秒
# M 分
# H 小时、
# D 天、
# W 每星期(interval==0时代表星期一)
# midnight 每天凌晨
th.setFormatter(format_str)#设置文件里写入的格式
#self.logger.addHandler(sh) #把对象加到logger里
self.logger.addHandler(th)
def SendTextMsgByEmail(qq,redlist):
msg_from='12345678@qq.com' #发送方邮箱
passwd='xxxxxx' #填入发送方邮箱的授权码
msg_to=qq+'@qq.com' #收件人邮箱
subject="服务提醒" #主题
content="您好,您下面的域名在微信中已无法访问:" + redlist #正文
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = Header(msg_from, 'utf-8')
msg['To'] = Header(msg_to, 'utf-8')
try:
s = smtplib.SMTP_SSL("smtp.qq.com",465) #邮件服务器及端口号
s.login(msg_from, passwd) #登录SMTP服务器
s.sendmail(msg_from, msg_to, msg.as_string()) #发邮件 as_string()把MIMEText对象变成str
#print ("发送成功")
except s.SMTPException:
#print ("发送失败")
pass
finally:
s.quit()
if __name__ == '__main__':
pool = ConnectionPool(host='127.0.0.1', port=6379, db=2, decode_responses=True)
rdb = Redis(connection_pool=pool)
key = rdb.randomkey() ## 获取随机key
#print(key)
keyValue = rdb.get(key)## 获取key的值
#print(keyValue)
keyTime = rdb.ttl(key) ## 获取key有效时间 秒
#print(keyTime)
keyValue = keyValue.replace("\"","").replace("\'","")
xx = keyValue.split(";")
nKeyValue = keyValue;
newkeyValue = xx[1]
Logger('/var/Logs/gm.log', level='info').logger.info(key + ":" + keyValue+"\n\r")
if (len(xx) == 2 and newkeyValue) :
domainlist = newkeyValue.split(",")
redlist = ""
for domain in domainlist:
try:
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url = 'http://wx.rrbay.com/pro/wxUrlCheck.ashx?url=' + domain
response = requests.get(url,headers=headers)
html = response.text
html = json.loads(html)
if (html['Code'] == "101") :
redlist += domain + ","
if (len(domainlist) == 1):
xx[1] = "";
else:
xx[1] = xx[1].replace("," + domain, "").replace(domain + ",", "");
except Exception,e:
html = ''
Logger('/var/Logs/gmerror.log', level='error').logger.error(e.message+"\n\r")
nKeyValue = xx[0] + ";" + xx[1]
if keyTime == -1:
rdb.set(key,nKeyValue)
else:
rdb.setex(key,keyTime,nKeyValue)
if(redlist):
#插入屏蔽的记录
redStr = "";
pool1 = ConnectionPool(host='127.0.0.1', port=6379, db=1, decode_responses=True)
rdb1 = Redis(connection_pool=pool1)
if (rdb1.exists("Red" + key)):
redStr = rdb1.get("Red" + key);
redStr = redStr + "," + redlist;
else:
redStr = redlist;
if keyTime == -1:
rdb1.setex("Red" + key, 1088139, redStr);
else:
rdb1.setex("Red" + key, keyTime, redStr);
SendTextMsgByEmail(xx[0],redlist)
定时计划任务,间隔3分钟检测一次
crontab -e
*/3 * * * * /usr/bin/python /var/www/service/GroundMonitor.py