• Python# 监控进程,并且发送邮件通知


    ###
    """
    判断一个进程是否存活,如果进程挂掉就会重启某个进程,并且发送邮件通知。邮件使用HTML
    """
    from __future__ import print_function
    from collections import OrderedDict
    import os, sys, time
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    
    #负载信息
    def load_stat():
        loadavg = {}
        f = open("/proc/loadavg")
        con = f.read().split()
        f.close()
        loadavg['lavg_1'] = con[0]
        loadavg['lavg_5'] = con[1]
        loadavg['lavg_15'] = con[2]
        loadavg['nr'] = con[3]
        loadavg['last_pid'] = con[4]
        return loadavg
    
    #内存信息
    def meminfo():
        ''' Return the information in /proc/meminfo
        as a dictionary '''
        meminfo = OrderedDict()
    
        with open('/proc/meminfo') as f:
            for line in f:
                meminfo[line.split(':')[0]] = line.split(':')[1].strip()
        return meminfo
    
    
    #    meminfo = meminfo()
    #    print('Total memory: {0}'.format(meminfo['MemTotal']))
    #    print('Free memory: {0}'.format(meminfo['MemFree']))
    
    def nojsmail(x, y):
        # 第三方 SMTP 服务
        mail_host = "smtp.exmail.qq.com"  # 设置服务器这个是qq
        mail_user = "linwen@xxxxx.com"  # 用户名
        mail_pass = "xxxxx"  # 口令
    
        sender = 'linwen@xxxxx.com'
        receivers = ['linwen@xxxxx.com']
        # mail_msg=str(timestamp) + ':' + 'Nodejs断开重启了
    ' + str(sys.exc_info()[1])
        mail_msg = """
        <p>NodeJS 进程异常退出,4 秒后重新启动...</p>
        <p>--------------------------------------</p>
        """ + 'Total memory: ' + str(meminfo['MemTotal']) + '<br > ' + 'Free memory: ' + str(
            meminfo['MemFree']) + '<br >' + "loadavg :" + str(load_stat()['lavg_15'])
    
        message = MIMEText(mail_msg, 'html', 'utf-8')
        message['From'] = Header("linwensheng", 'utf-8')
        message['To'] = Header("linwensheng", 'utf-8')
    
        subject = 'Python 监控NodeJs邮件测试'
        message['Subject'] = Header(subject, 'utf-8')
    
        try:
            smtpObj = smtplib.SMTP()
            smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
            smtpObj.login(mail_user, mail_pass)
            smtpObj.sendmail(sender, receivers, message.as_string())
            print("邮件发送成功")
    
        except smtplib.SMTPException:
            print("Error: 无法发送邮件")
    
    
    if __name__ == "__main__":
        ret = os.popen('ps -C mysqld -o pid,cmd').readlines()
        if len(ret) < 3:
            print('NodeJS 进程异常退出,4 秒后重新启动')
            time.sleep(3)
            os.system("service mysqld restart >/dev/null 2>&1")
            timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            meminfo = meminfo()
            nojsmail(meminfo, load_stat)

    ###

  • 相关阅读:
    SSH 错误解决案例1:Read from socket failed: Connection reset by peer
    vmware已经全面支持open-vm-tools
    RHEL7.1 安装openstack juno 一个BUG
    web快速开发框架 WebBuilder 8.7发布
    2019年如何选择合适的快速开发平台和框架
    快速开发平台 WebBuilder 8.6发布
    快速开发平台比较
    快速开发平台 WebBuilder 8.4 发布
    快速开发平台 WebBuilder 8 发布
    快速开发平台WebBuilder中ExtJS表格的增删改查
  • 原文地址:https://www.cnblogs.com/lwsup/p/7388242.html
Copyright © 2020-2023  润新知