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

未完待续。。。

原文地址:https://www.cnblogs.com/zhzhang/p/7271717.html