使用python来检查进程是否存在,如果不存在就邮件提醒,并且每日发送一份整体报告

#!/usr/bin/env python
# -*- coding:utf-8 -*-

'''
Description:	check progress is existed?
Named:          check_progress.py
Author:		Icyboy
Email:		xupeng.js@gmail.com
Execute:        */30 * * * * python check_progress.py >/dev/null 2>&1
'''

import os, time
import smtplib
from email.mime.text import MIMEText

host = '360'
check_progress = ['cpcdaemon.php', 'nginx', 'mysql', 'redis', 'supervisor', 'tomcat', 'php-fpm', 'mongodb', 'memcached']

day_send_mail_time = '10:00'
mailto_list = ["xupeng@jiunile.com", "xxx@jiunile.com"]
mail_host = "smtp.163.com"
mail_user = "xxx@163.com"
mail_pass = "xxx"
mail_postfix = "163.com"


def send_mail(sub, content):
    me = mail_user + "<" + mail_user + "@" + mail_postfix + ">"
    msg = MIMEText(content)
    msg['Subject'] = sub
    msg['From'] = me
    msg['To'] = ";".join(mailto_list)
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user, mail_pass)
        s.sendmail(me, mailto_list, msg.as_string())
        s.close()
        return True
    except Exception, e:
        log("Unexpected error:" + str(e))
        return False


def progress_exist(progress_name):
    try:
        progress_num = int(os.popen('ps -ef | grep ' + progress_name + ' | grep -v grep | wc -l').read())
        if progress_num > 0:
            return {'name': progress_name, 'status': 1}
        else:
            return {'name': progress_name, 'status': 0}
    except Exception, e:
        log("Unexpected error:" + str(e))
        return {'name': progress_name, 'status': 0}


def log(msg):
    dateNow = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    logStr = '%s : %s \n' % (dateNow, msg)
    logfile.write(logStr)


if __name__ == '__main__':
    logfile = open("/tmp/tmp.log", "a")

    nowTime = time.strftime('%H:%M', time.localtime())

    lists = []
    for progress_name in check_progress:
        status = progress_exist(progress_name)
        lists.append(status)

    bad_msg = 'not run progress:'
    good_msg = 'progress is run ok! '
    flag = 1
    for list in lists:
        if list['status'] == 0:
            bad_msg += list['name'] + ' '
            flag = 0
        else:
            good_msg = list['name'] + ' ' + good_msg

    if flag == 0:
        log(bad_msg)
        send_mail(host + ' progress check bad', bad_msg)
    else:
        bad_msg = ''
        log(good_msg)

    if nowTime == day_send_mail_time:
        #发送整体邮件
        df = os.popen('df -h').read()
        send_mail(host + ' progress status', good_msg + bad_msg + "\n\n" + df)

    logfile.close()