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")