diff --git a/auto_email/__init__.py b/auto_email/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/auto_email/error_email.py b/auto_email/error_email.py new file mode 100644 index 0000000..3903f1e --- /dev/null +++ b/auto_email/error_email.py @@ -0,0 +1,68 @@ +import datetime +import logging +import smtplib +from email.mime.text import MIMEText + +from config.email import ERROR_EMAIL_CONFIG + + +def send_an_error_email(program_name, error_name, error_detail): + """ + @program_name: 运行的程序名 + @error_name: 错误名 + @error_detail: 错误的详细信息 + @description: 程序出错是发送邮件提醒 + """ + + # SMTP 服务器配置 + smtp_server = ERROR_EMAIL_CONFIG['smtp_server'] + sender = ERROR_EMAIL_CONFIG['sender'] + authorization_code = ERROR_EMAIL_CONFIG['authorization_code'] + receivers = ERROR_EMAIL_CONFIG['receivers'] + + # 获取程序出错的时间 + error_time = datetime.datetime.strftime(datetime.datetime.today(), "%Y-%m-%d %H:%M:%S:%f") + # 邮件内容 + subject = "【程序异常提醒】{name} {date}".format(name=program_name, date=error_time) # 邮件的标题 + content = '''
+
+

程序运行异常通知

+
+

程序:【{program_name}】运行过程中出现异常错误,下面是具体的异常信息,请及时核查处理!

+ + + + + + + + + + + + + + + + +
程序异常详细信息
异常简述{error_name}
异常详情{error_detail}
+
+
+
+ '''.format(program_name=program_name, error_name=error_name, error_detail=error_detail) # 邮件的正文部分 + # 实例化一个文本对象 + massage = MIMEText(content, 'html', 'utf-8') + massage['Subject'] = subject # 标题 + massage['From'] = sender # 发件人 + receivers_str = ','.join(receivers) + massage['To'] = receivers_str # 收件人 + + log = logging.getLogger() + try: + mail = smtplib.SMTP_SSL(smtp_server, 994) # 连接SMTP服务,默认465和944这里用994 + mail.login(sender, authorization_code) # 登录到SMTP服务 + mail.sendmail(sender, receivers, massage.as_string()) # 发送邮件 + mail.quit() + log.info("成功发送了一封邮件到" + receivers_str) + except smtplib.SMTPException: + log.warning("邮件发送失败!") diff --git a/config/email.py b/config/email.py new file mode 100644 index 0000000..8f9e1ea --- /dev/null +++ b/config/email.py @@ -0,0 +1,11 @@ +# 程序异常短信配置 +ERROR_EMAIL_CONFIG = { + # SMTP服务器地址 + 'smtp_server': 'smtp.163.com', + # 发件人邮箱地址 + 'sender': 'EchoLiu618@163.com', + # 授权码--用于登录第三方邮件客户端的专用密码,不是邮箱密码 + 'authorization_code': 'OKPQLIIVLVGRZYVH', + # 收件人邮箱地址 + 'receivers': ['1515783401@qq.com'] +} diff --git a/main.py b/main.py index d19e406..b5c2ae9 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,7 @@ import logging.config +import traceback +from auto_email.error_email import send_an_error_email from config.log import LOGGING_CONFIG from photo_review.photo_review import main @@ -8,4 +10,13 @@ if __name__ == '__main__': logging.config.dictConfig(LOGGING_CONFIG) log = logging.getLogger() log.info("照片审核开始") - main() + + # 崩溃后的重试次数 + retry_time = 2 + for _ in range(++retry_time): + try: + main() + except Exception as e: + log.error(traceback.format_exc()) + send_an_error_email(program_name='照片审核关键信息抽取脚本', error_name=repr(e), error_detail=traceback.format_exc()) + continue diff --git a/photo_review/photo_review.py b/photo_review/photo_review.py index 2d23df9..bc7bdc7 100644 --- a/photo_review/photo_review.py +++ b/photo_review/photo_review.py @@ -1,4 +1,5 @@ import json +import logging from time import sleep from paddlenlp import Taskflow @@ -213,4 +214,7 @@ def main(): last_pk_phhd = pk_phhd else: # 没有查询到新案子,等待 5 分钟后再查 - sleep(5 * 60) + sleep_minutes = 5 + log = logging.getLogger() + log.info(f"暂未查询到新案子,等待{sleep_minutes}分钟...") + sleep(sleep_minutes * 60)