公司大数据业务开始时间不长,大数据监控体系还没有,对于各种程序的定时监控也没有好的解决方案,比如在程序、数据异常时,第一时间发一封邮件通知相关人员也是好的。考虑到好多定时任务是用python来触发,管理的,我们选择了轻便,灵活,功能强大的python语言来实现发送邮件功能。

  • 发送邮件方法这里给出Python2代码如下:

 1#!/usr/bin/python
 2# -*- coding:utf-8 -*-
 3
 4import datetime
 5import commands
 6
 7# 执行shell命令
 8def execCmd(cmd):
 9    cmd = 'source /etc/profile;' + cmd
10    return commands.getstatusoutput(cmd)
11
12def sendEmail(info):
13    #发送邮件
14    import smtplib
15    #构造邮件
16    from email.mime.text import MIMEText
17
18    #发送服务器地址
19    # mail_host = 'smtp.qq.com'
20    # qq企业邮箱与qq邮箱服务器地址有所不同
21    mail_host = 'smtp.exmail.qq.com'
22
23    #用户名
24    mail_user = 'keguang@qq.com'
25    #密码/授权码
26    mail_pass = '123456'
27
28    #指定发件人
29    me = mail_user
30    #收件人
31    mail_receive = ['123456789@163.com', '123456789@139.com']
32
33    #主题
34    mail_subject = '实时程序状态...'
35    #内容
36    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
37    mail_content = '%s<br/>时间 %s'%(info, now)
38
39    #构造文件内容
40    #plain表示纯文本,html表示网页版
41    msg = MIMEText(mail_content,'html','utf-8')
42    msg['Subject'] = mail_subject
43    msg['From'] = me
44    msg['To'] = ';'.join(mail_receive)
45
46    ##发送邮件
47    #连接服务器
48    client = smtplib.SMTP_SSL(mail_host,465)
49    #登陆服务器
50    client.login(mail_user,mail_pass)
51    #发送邮件
52    client.sendmail(me,mail_receive,msg.as_string())
53
54    #退出
55    client.quit()
56
57if __name__ == '__main__':
58    types = ['install', 'helper']
59    types2 = ['Install', 'Helper']
60    for i in range(len(types)):
61        type_ = types[i]
62        cmd = 'ps -ef | grep SparkSubmit | grep /home/hadoop/config/flash/%s/commons.xml'%(type_)
63        (status, res) = commands.getstatusoutput(cmd)
64        if len(res.split("\n")) == 1:
65            cmd = 'sh /home/hadoop/scripts/flash/submit%s.sh'%(types2[i])
66            (status, res) = commands.getstatusoutput(cmd)
67            info = ''
68            if status == 0:
69                info = '%s spark 实时程序停止,已经重新启动一次...'%(type_)
70            else:
71                info = '%s spark 实时程序停止,重新启动失败...'%(type_)
72            sendEmail(info)
73        else:
74            info = '%s spark 实时程序运行正常...'%(type_)
75            sendEmail(info)

如果觉得复杂,可以新建一个.py文件,比如名为emailTest.py,将这个方法放入,放入当前工作目录,用的时候就可以调用

1import emailTest

将这个模块导入,发送邮件时只需要:

1if __name__ == '__main__':
2
3    emailTest.sendEm('发送邮件测试即可')

具体需要根据自己的需要稍作修改。

点击【阅读原文】在我的个人博客中查看。