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("\n%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 = "[email protected]"
    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 \n"
            log(logfile, content)
            Email(to, subject, content)
            isstart = startProcess(process_script)
            time.sleep(sleep)
            if isstart == True:
                content += "spark-streaming start SUCCESS \n"
                log(logfile, content)
                Email(to, subject+" && start SUCCESS", content)
    else:
        log(logfile, "running ERROR")

脚本执行方法:

/usr/local/bin/python3 /home/admin/bin/sparkStreamingEmail.py [email protected] [email protected]

未完待续。。。

时间: 2024-08-14 23:56:52

Python3判断shell下进程是否存在&&启动&&邮件通知的相关文章

启动bash shell的三种方式下,检查的启动文件

启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash shell会作为登录shell启动,登录shell会从4个不同的启动文件里读取命令,下面是bash shell处理这些文件的次序: 1./etc/profile 2.$HOME/.bash_profile 3.$HOME/.bash_login 4.$HOME/.profile 其中/etc/pr

Linux 下进程与线程的基本概念

2019-10-01 关键字:进程.线程.信号量.互斥锁 什么是程序? 程序就是存放在磁盘上的指令和数据的有序集合,就是源代码编译产物. 它是静态的. 什么是进程? 进程就是操作系统为执行某个程序所分配的资源的总称.进程是程序的一次执行过程,因此它与程序不同,它是动态的.它的生命周期包括创建.调度.执行和消亡. 进程的内容主要包括以下三个部分: 1.正文段: 2.用户数据段: 3.系统数据段. 其中正文段与用户数据段两部分是从程序当中来的.而系统数据段则是操作系统分配的用来管理这个进程用的. 系

linux下进程相关操作

一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域.数据区域和堆栈区域.文本区域存储处理器执行的代码:数据区域存储变量和进程执行期间使用的动态分配的内存:堆栈区域存储着活动过程调用的指令和本地变量. 第二,进程是一个“执行中的程序”.程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们

shell下的常用命令

1.help  显示所有内置命令的列表,或某一个内置命令的用法 #help //查看所有内置命令 #help 内置命令 //查看内置命令使用方法 #help -s 内置命令 //显示内置命令的语法格式,非常好用哦! [[email protected] var]# help -s cd cd: cd [-L|-P] [dir] 2.echo 用来显示一行文字,默认会自动换行 [[email protected] ~]# echo www www -e 让字符串中的特殊字符起作用.例如: [[em

第9章:Shell脚本进程管理

第9章:Shell脚本进程管理 9.1.进程概念 理解进程概念需要先简单了解指令和程序这两个概念,进程跟指令和程序是相关联的. 什么叫指令? 指令是指示计算机执行某种操作的命令,它由一串二进制数码组成. 什么叫程序? 程序(Program)是实现计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的集合. 什么叫进程? 进程是正在运行的程序的实例,进程也是执行程序的具体实现过程. 指令.程序和进程三者之间的关系? 计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存

Linux Shell下的后台运行及其前台的转换

当用bash启动一个程序,你可以用在程序后加&,实现程序在后台运行: 例如: emacs & 但如果你忘了输入&;但你又不想把程序停止后重新启动: 你可以这么做: 按Ctrl + Z暂停前台工作,比如前面提到的Emacs: 然后用jobs命令查看当前bash一共启动了多少程序,你可以看到你的emacs在其中,它的状态是Stoped的; 并且它的jobID也可以看,比如是2 然后用命令bg 2 这样你就可以达到和emacs &一样的效果了. 当你有些工作比如updatedb,

MongoDB Linux下的安装和启动(转)

1. 下载MongoDB,此处下载的版本是:mongodb-linux-i686-1.8.1.tgz.tar. http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.1.tgz 相关阅读: MongoDB Linux下的安装和启动  http://www.linuxidc.com/Linux/2011-05/36309.htm MongoDB下的高级查询示例  http://www.linuxidc.com/Linux/2011-05/36

linux下进程的实际用户ID(有效组)和有效用户ID(有效组ID)

实际用户ID(实际组ID):标识当前用户(所属组)是谁,当用户登陆时取自口令文件. 有效用户ID(有效组ID):用来决定我们(当前进程)对文件的访问权(即实际该进程的是以那个用户运行的). 一般情况下,进程的有效用户ID等于进程的实际用户ID,进程的有效用户组ID等于进程的实际用户组ID. 但是当可执行程序文件的文件模式(st_mode)中设置了“设置-用户-ID(set_user_id)位”时,进程的有效用户ID等于该可执行文件的拥有者ID. 同样的如果可执行文件的文件模式(st_mode)中

Windows64位安装GPU版TensorFlow 0.12,Power Shell下输入:安装Tensorflow的全教程

推荐使用powershell,只需要在cmd指令窗口输入powershell即可 下载64位Python3.5(一定要3.5!!)可以通过Python 3.5 from python.org 或 Python 3.5 from Anaconda 下载并安装Python3.5.2(注意选择正确的操作系统). 具体教程可以查看Python3.5.2百度经验安装,里面有个细节,自动设置环境变量,不能忘 安装VS2015,如果是2013的后面要加个插件,这是后话 为了使用国内镜像加速pip安装,需要如下