1、邮件发送
1)安装yagmail
pip install yagmail
2)使用代码
import yagmail
username = 'cjavapy@qq.com'
passwd = '**********' # 使用的qq邮箱发送邮件,为qq邮箱的授权码,非密码,可在网页的邮箱设置中开通,其它邮箱也类似
mail = yagmail.SMTP(user=username,
password=passwd,
host='smtp.qq.com',#其他服务器就smtp.qq.com smtp.126.com
smtp_ssl=True
) #如果用的是qq邮箱或者你们公司的邮箱使用是安全协议的话,必须写上 smtp_ssl=True
mail.send(
to=['to@qq.com',], #如果多个收件人的话,写成list就行了,如果只是一个账号,就直接写字符串就行to='username@qq.com'
cc='cc@qq.com',#抄送
subject='这是邮件主题',#邮件标题
contents='邮件正文内容:学习Python编程!!!') #邮件正文,附件如果只有一个的话,用字符串就行
参考文档:Python 使用smtplib、zmail或yagmail发送邮件
2、web站点监控
通过请求异常和返回响应的错误代码判断站点异常,从而重新启动程序,代码如下,
import requests
import os
try:
response = requests.get(url, headers={
"user-agent": "aliyun_monitor_Python-urllib/cjavapy",
"accept-encoding": "gzip"
}, data={}, timeout=50)
if response.status_code != 200:
NETWORK_STATUS = False
except requests.exceptions.Timeout:
NETWORK_STATUS = False # 请求超时改变状态
if e == requests.exceptions.Timeout and NETWORK_STATUS == False:
'''请求超时'''
for i in range(1, 3):
print('请求超时,第%s次重复请求' % i)
try:
response = requests.get(url, headers={
"user-agent": "aliyun_monitor_Python-urllib/cjavapy",
"accept-encoding": "gzip"
}, data={}, timeout=50)
if response.status_code == 200:
NETWORK_STATUS = True
continue
except requests.exceptions.Timeout:
NETWORK_STATUS = False
except Exception as e:
NETWORK_STATUS = False
if NETWORK_STATUS == False:
os.system("supervisorctl restart all")
相关文档:Linux Supervisor 进程管理工具安装及使用
3、crontab定时执行
使用Linux crontab定时执行Python程序,实现定时检测服务器状态情况,判断异常尝试重新启动并发送通知邮件。
1)配置crontab
vi /etc/crontab
编辑文件配置每5分钟执行一次,添加内容如下:
*/5 * * * * root python3 /data/checkUwsgi.py
相关文档:
2)实现代码
import requests
import os
import yagmail
def sendEmail(title,msg):
username = 'cjavapy@qq.com'
passwd = '**********' # 使用的qq邮箱发送邮件,为qq邮箱的授权码,非密码,可在网页的邮箱设置中开通,其它邮箱也类似
mail = yagmail.SMTP(user=username,
password=passwd,
host='smtp.qq.com',#其他服务器就smtp.qq.com smtp.126.com
smtp_ssl=True
) #如果用的是qq邮箱或者你们公司的邮箱使用是安全协议的话,必须写上 smtp_ssl=True
mail.send(
to=['to@qq.com',], #如果多个收件人的话,写成list就行了,如果只是一个账号,就直接写字符串就行to='username@qq.com'
cc='cc@qq.com',#抄送
subject=title,#邮件标题
contents=msg)#邮件正文,附件如果只有一个的话,用字符串就行
NETWORK_STATUS = True # 判断状态变量
url = "http://www.example.com"
try:
response = requests.get(url, headers={
"user-agent": "aliyun_monitor_Python-urllib/cjavapy",
"accept-encoding": "gzip"
}, data={}, timeout=50)
if response.status_code != 200:
NETWORK_STATUS = False
except requests.exceptions.Timeout:
NETWORK_STATUS = False # 请求超时改变状态
if e == requests.exceptions.Timeout and NETWORK_STATUS == False:
'''请求超时'''
for i in range(1, 3):
print('请求超时,第%s次重复请求' % i)
sendEmail("服务异常",'请求超时,第%s次重复请求' % i)
try:
response = requests.get(url, headers={
"user-agent": "aliyun_monitor_Python-urllib/cjavapy",
"accept-encoding": "gzip"
}, data={}, timeout=50)
if response.status_code == 200:
NETWORK_STATUS = True
continue
except requests.exceptions.Timeout:
NETWORK_STATUS = False
except Exception as e:
sendEmail("服务异常",str
(e))
NETWORK_STATUS = False
if NETWORK_STATUS == False:
os.system("supervisorctl restart all")