zoukankan      html  css  js  c++  java
  • Python3判断shell下进程是否存在&&启动&&邮件通知

    判断进程是否存在

    def isRunning(process_name):
        try:
            process = len(os.popen('ps aux | grep "' + process_name + '" | grep -v grep').readlines())
            if process >= 1:
                return True
            else:
                return False
        except:
            print("Check process ERROR!!!")
            return False

    启动挂掉的进程

    def startProcess(process_script):
        try:
            result_code = os.system(process_script)
            if result_code == 0:
                return True
            else:
                return False
        except:
            print("Process start Error!!!")
            return False

     由于脚本层层调用,如需发现异常一定要查看各种日志。。。。。

    crontab 和 shell命令下会有各种环境变量不一致的问题。。。。。

    绊倒过N次了。。。。今天又被绊了。。。。

    例子:实现监控某个进程,如果进程挂掉,则启动进程。

    并且接着发邮件通知。。。

    #!/bin/env python3
    # -*- coding: utf-8 -*-
    
    from exchangelib import DELEGATE, Account, Credentials, Message, Mailbox, HTMLBody
    import sys, time
    import os
    
    
    def log(logfile, content):
        f = open(logfile, 'a')
        f.write(time.strftime("
    %Y-%m-%d %H:%M:%S   ") + content)
        f.flush()
        f.close()
    
    
    def Email(to, subject, body):
        creds = Credentials(
            username='xxxxxx',
            password='xxxxxx'
        )
        account = Account(
            primary_smtp_address='xxxxxx',
            credentials=creds,
            autodiscover=True,
            access_type=DELEGATE
        )
        m = Message(
            account=account,
            subject=subject,
            body=HTMLBody(body),
            to_recipients = [Mailbox(email_address=to)]
        )
        m.send()
    
    
    def isRunning(process_name):
        try:
            process = len(os.popen('ps aux | grep "' + process_name + '" | grep -v grep').readlines())
            if process >= 1:
                return True
            else:
                return False
        except:
            print("Check process ERROR!!!")
            return False
    
    
    def startProcess(process_script):
        try:
            result_code = os.system(process_script)
            if result_code == 0:
                return True
            else:
                return False
        except:
            print("Process start Error!!!")
            return False
    
    
    if __name__ == '__main__':
    
        process_name = "spark-streaming"
        process_script = "/bin/bash /home/admin/agent/spark/streaming_start.sh"
    
        subject = "datacollect-1 spark-streaming ERROR"
        logfile = "/home/admin/bin/logfile.log"
    
        content = ""
        wrong_to = "zhzhang09@126.com"
        sleep = 1
    
        content = "There are %d arguments, They are %s" % (len(sys.argv), str(sys.argv))
        log(logfile, content)
    
        if len(sys.argv) == 3:
            user = sys.argv[1]
            to = sys.argv[2]
            log(logfile, content)
            time.sleep(sleep)
            isrunning = isRunning(process_name)
            if isrunning == False:
                content = "spark-streaming running ERROR 
    "
                log(logfile, content)
                Email(to, subject, content)
                isstart = startProcess(process_script)
                time.sleep(sleep)
                if isstart == True:
                    content += "spark-streaming start SUCCESS 
    "
                    log(logfile, content)
                    Email(to, subject+" && start SUCCESS", content)
        else:
            log(logfile, "running ERROR")

    脚本执行方法:

    /usr/local/bin/python3 /home/admin/bin/sparkStreamingEmail.py zhzhang09@126.com zhzhang09@126.com

    未完待续。。。

  • 相关阅读:
    中断向量表
    lua绑定C++对象—luna模板
    lua对象调用—用 "." 与 ":" 调用表中函数时的区别
    FreeSWITCH 实现 双线路呼叫(主备线路)
    [转]Freeswitch在阿里云服务器语音不通问题小记(FS的NAT穿越穿透)
    [转]签发使用自签发证书--指定使用多域名、泛域名及直接使用IP地址
    [转]FreeSwitch启用WEBRTC小记
    [转]FreeSwitch1.10版本安装及内置mariadb(mysql)使用记录
    FreeSWITCH 使用 lua 脚本 接管 分机注册,鉴权等
    sip客户端NAT注册和拨打FreeSWITCH ,FreeSWITCH 会发到 sip客户端内网地址的问题
  • 原文地址:https://www.cnblogs.com/zhzhang/p/7271717.html
Copyright © 2011-2022 走看看