判断进程是否存在

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 = "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 \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 zhzhang09@126.com zhzhang09@126.com

未完待续。。。

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

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

    启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash ...

  2. linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行

    linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行 crontab每分钟执行一次,但5秒以上才有更新数据,有时候一分钟可能跑不完上一个进程,需要先等10秒再判 ...

  3. [转]使用 Shell 对进程资源进行监控

    原文:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-monitoring/ 使用 Shell 对进程资源进行监控 检查进程是否存在 在 对 ...

  4. shell查看进程

    用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货: #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]th ...

  5. python3之线程与进程

    1.CPU运行原理 我们都知道CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列.CPU从逻辑上可以划分成3个模块,分别是控制单元.运算单元和存储单元,这三部分由CPU内 ...

  6. shell浅谈之九子shell与进程处理

    转自:http://blog.csdn.net/taiyang1987912/article/details/39529291 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] ...

  7. Bash Shell 获取进程 PID

    转载地址:http://weyo.me/pages/techs/linux-get-pid/ 导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运 ...

  8. 【Linux下进程机制】从一道面试题谈linux下fork的运行机制

    今天一位朋友去一个不错的外企面试linux开发职位,面试官出了一个如下的题目: 给出如下C程序,在linux下使用gcc编译: #include "stdio.h" #includ ...

  9. linux下进程相关操作

    一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的 ...

随机推荐

  1. iOS 性能调优

    1.内存空间的划分: 我们知道,一个进程占用的内存空间,包含5种不同的数据区:(1)BSS段:通常是存放未初始化的全局变量:(2)数据段:通常是存放已初始化的全局变量.(3)代码段:通常是存放程序执行 ...

  2. 【C#】Skip和Tack方法实现分页

    int pageIndex = SearchModel.PageIndex <= 0 ? 1 : SearchModel.PageIndex; return BatchInfoList.Skip ...

  3. 【Spring】Spring+struts2+Hibernate框架的搭建

    1.搭建过程 首先需要引入Spring.Struts2.Hibernate的开发包,已经数据库的驱动包. UserAction.java文件 package cn.shop.action; impor ...

  4. SharePoint利用HttpModule的Init方法实现全局初始化

    接上篇 我们知道,HttpRuntime中会对每一个Request创建一个HttpApplication对象(HttpApplicationFactory从一个HttpApplication池来拿). ...

  5. stm8 stvd工程头文件包含方式

    方式一:在Include  Files上右键 add files to folder把.h文件添加到该组下, 添加完编译成功之后,下面窗口会多出一个预处理包含路径(若有错误没有编译成功,则看不到) 方 ...

  6. Redis使用问题及知识点记录 - 待整理

    介绍 官网:https://redis.io/commands/expire spring data redis 整合redis使用方法 spring 整合api :http://docs.sprin ...

  7. 转 kafka 清理数据

    由于项目原因,最近经常碰到Kafka消息队列拥堵的情况.碰到这种情况为了不影响在线系统的正常使用,需要大家手动的清理Kafka Log.但是清理Kafka Log又不能单纯的去删除中间环节产生的日志, ...

  8. eclipse jdk版本设置

    1 Java Build Path(项目的编写环境配置): 在项目上单击右键,properties -> Java Build Path -> Libraries,选择JRE System ...

  9. HTML常用标签(整理)

    超文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言.现在应用主流是HTML 4.01版本,发布于1999年,为W3C推荐标准.HTML ...

  10. cocopods 问题

    http://www.cocoachina.com/bbs/read.php?tid=1711580