判斷進程是否存在
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
未完待續。。。