python进行磁盘监控 处理 和 报警

简介:
#coding:utf-8
import threading
from datetime import datetime
import time
import os
import smtplib
#from email.mime.text import MIMEText
from email.MIMEText import MIMEText
#from email.Header import Header
#from log import logger
import logging,os,time,atexit,sys
from signal import SIGTERM
import subprocess
import socket,fcntl,struct
def write_log(local_logs):
    if not os.path.exists("disklogs"):
    try:
            os.mkdir("disklogs")
    except:
        print 'can not mkdir'
    cur_time = time.strftime("%Y%m%d")
    logs = "["+time.strftime("%Y-%m-%d-%H-%M-%S")+"]: "+local_logs+"\n"
    file = open("disklogs/"+cur_time+".txt","a")
    file.write(logs)
    file.close()
def disk_stat():
    hd = {}
    disk = os.statvfs("/data")
    free = (disk.f_bavail * disk.f_frsize)
    total =(disk.f_blocks * disk.f_frsize)
    used  = (disk.f_blocks - disk.f_bfree) * disk.f_frsize*1.024
    try:
        percent = (float(used) / total) * 100
    except error:
#        get_log().info('calucate error')
    pass
    return percent
def get_log():
    logging.basicConfig(level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%a, %d %b %Y %H:%M:%S',
    filename='myapp.log',
    filemode='w')
    logger = logging.getLogger('root')
    return logger
def backup_time():
    now = time.mktime(datetime.now().timetuple())-60*2
    result = time.strftime('%Y%m%d', time.localtime(now))
    backupresult = str(result)
    return backupresult
def send_email(content):
 
    sender = "lgl15984@163.com"
    receiver = ["992975991@qq.com"]
    host = 'smtp.163.com'
    port = 465
    msg = MIMEText(content)
    msg['From'] = "lgl15984@163.com"
    msg['To'] = "992975991@qq.com"
    msg['Subject'] = "harddisk check"
 
    try:
        smtp = smtplib.SMTP()
        smtp.connect('smtp.163.com:25')
#   smtp.ehlo()
#   smtp.starttls()
#   smtp.ehlo()
    
#        smtp = smtplib.SMTP_SSL(host, port)
        smtp.login(sender, 'aaaaaa')
        smtp.sendmail(sender, receiver, msg.as_string())
#        getlog().info("send email success")
    except Exception, e:
#        get_log().error(e)
        pass
    file.close()
def get_ip(ifname):
    s  = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(s.fileno(),0x8915,struct.pack('256s',ifname[:15]))[20:24])

def check():
    percent = disk_stat()
    write_log(str(percent))
#    get_log().info(percent)
    ip = get_ip('eth0')
    if int(percent) > 70:
        result = ip  + "   disusage: " + str(percent)
        write_log(result)
        os.popen('find /data/back -mtime +0 -exec rm -rf {} \; > /dev/null 2>&1')
        
    elif int(percent) > 85:
       result = ip  + "   disusage: " + str(percent) + "dangerous"
           write_log(result)
       os.popen('rm -f /data/back/*')
    else:
        result = "false"
    return result
def task():
    while  True:
        result = check()
    if result == "false":
        pass
    else:
            try:
                send_email(result)
            except:
            pass
#        break
    time.sleep(1*60)
#def run_monitor():
#    monitor = threading.Thread(target=task)
#    monitor.start()
# def createDaemon():
#     #脱离父进程
#     try:
#         pid = os.fork()
#         if pid > 0:
#             os._exit(0)
#     except OSError,error:
#         print "fork #1 failed: %d (%s)" % (error.errno, error.strerror)
#         os._exit(1)
#     #修改当前的工作目录
#     os.chdir('/')
#     #脱离终端
#     os.setsid()
#     #重设文件创建权限
#     os.umask(0)
#     #第二次创建进程,禁止进程重新打开终端文件
#     try:
#         pid = os.fork()
#         if pid > 0:
#             print 'Daemon PID %d' % pid
#             os._exit(0)
#     except OSError,error:
#         print "fork #1 failed: %d (%s)" % (error.errno, error.strerror)
#         os._exit(1)
#     run_monitor()
class Daemon:
    def __init__(self,pidfile,homedir,stderr='/dev/null',stdout='/dev/null',stdin='/dev/null'):
        self.stdin = stdin
        self.stdout = stdout
        self.stderr = stderr
        self.pidfile = pidfile
        self.homedir = homedir
    def _daemonize(self):
        try:
            pid = os.fork()
            if pid > 0:
                sys.exit(0)
        except OSError,e:
            sys.stderr.write("fork #1 failed: %d (%s) \n" % (e.errno,e.strerror))
            sys.exit(1)
        os.setsid()
        os.chdir('/')
        os.umask(0)
        try:
            pid = os.fork()
            if pid > 0:
                sys.exit(0)
        except OSError,e:
            sys.stderr.write("fork #1 failed: %d (%s) \n" % (e.errno,e.strerror))
            sys.exit(1)
        sys.stdout.flush()
        sys.stderr.flush()
        si = file(self.stdin,'r')
        so = file(self.stdout,'a+')
        se = file(self.stderr,'a+',0)
        os.dup2(si.fileno(),sys.stdin.fileno())
        os.dup2(so.fileno(),sys.stdout.fileno())
        os.dup2(se.fileno(),sys.stderr.fileno())
        atexit.register(self.delpid)
        pid = str(os.getpid())
        file(self.pidfile,'w+').write("%s\n" % pid)
    def delpid(self):
        os.remove(self.pidfile)
    def start(self):
        try:
            pf = file(self.pidfile,'r')
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            pid = None
        if pid:
            message = "pidfile %s already exist. Daemon already running?\n"
            sys.stderr.write(message)
            sys.exit(1)
        self._daemonize()
        self._run()
    def stop(self):
        try:
            pf = file(self.pidfile,'r')
            pid = int(pf.read().strip())
            pf.close()
        except IOError:
            pid = None
        if not pid:
            message = "pidfile % does not exist,Daemon not running?\n"
            sys.stderr.write(message)
            return
        try:
            while 1:
                os.kill(pid,SIGTERM)
                time.sleep(0.1)
        except OSError,err:
            err = str(err)
            if err.find("No such process") > 0:
                if os.path.exists(self.pidfile):
                    os.remove(self.pidfile)
                else:
                    print str(err)
                    sys.exit(1)
    def restart(self):
        self.stop()
        self.start()
    def _run(self):
        pass
class Mydaemon(Daemon):
    def _run(self):
        task()
def main():
    homedir = os.getcwd()
    for i in ('log','run'):
        path = homedir + '/' + i
        if not os.path.exists(path):
            os.makedirs(path,0755)
    stdout = homedir + '/log' + '/server.log'
    stderr = homedir + '/log' + '/server.err'
    pidfile = homedir + '/run' + '/server.pid'
    daemon = Mydaemon(pidfile,homedir,stdout=stdout,stderr=stderr)
    if len(sys.argv) == 2:
        if 'start' == sys.argv[1]:
            print 'start daemon'
            daemon.start()
        elif 'stop' == sys.argv[1]:
            print 'stop daemon'
            daemon.stop()
        elif 'restart' == sys.argv[1]:
            print 'restart daemon'
            daemon.restart()
        else:
            print 'Unknown command'
            sys.exit(2)
        sys.exit(0)
    else:
        print "usage: %s start|stop|restart" % sys.argv[0]
        sys.exit(2)
if __name__ == "__main__":
    main()
# if __name__ == "__main__":
#     run_monitor()




本文转自 luoguo 51CTO博客,原文链接:http://blog.51cto.com/luoguoling/1616619

相关文章
|
7天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
46 20
|
3月前
|
机器学习/深度学习 监控 TensorFlow
使用Python实现深度学习模型:智能宠物监控与管理
使用Python实现深度学习模型:智能宠物监控与管理
104 0
|
3月前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
56 1
|
3月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
56 0
|
3月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
57 0
|
4月前
|
数据采集 运维 监控
自动化运维:用Python打造简易监控系统
【8月更文挑战第31天】在追求高效的IT世界里,自动化运维不再是奢侈品而是必需品。本文将通过一个Python示例,展示如何构建一个简单的系统监控工具。从数据采集到警报触发,我们将一步步解锁自动化的秘密,让你的服务器管理变得轻松而高效。
|
5月前
|
机器学习/深度学习 运维 监控
使用Python实现深度学习模型:智能安防监控与异常检测
【7月更文挑战第26天】 使用Python实现深度学习模型:智能安防监控与异常检测
75 6
|
4月前
|
监控 Java Serverless
Serverless 应用的监控与调试问题之PyFlink对于Python UDF的性能如何提升
Serverless 应用的监控与调试问题之PyFlink对于Python UDF的性能如何提升
|
4月前
|
运维 监控 大数据
深入探讨网络自动化的魅力所在,以及如何利用Python这一强大工具,实现网络设备的批量配置与监控
在信息洪流的浪潮中,网络自动化如同一盏明灯,引领着我们穿越复杂网络管理的迷雾。它不仅简化了网络运维人员的工作,更是在大数据、云计算等技术飞速发展的背景下,成为了构建高效、稳定网络环境的关键。本文将深入探讨网络自动化的魅力所在,以及如何利用Python这一强大工具,实现网络设备的批量配置与监控,以此展现网络自动化在简化复杂网络管理中的重要作用。
89 0
|
5月前
|
机器学习/深度学习 Prometheus 监控
使用Python实现深度学习模型:模型监控与性能优化
【7月更文挑战第8天】 使用Python实现深度学习模型:模型监控与性能优化
172 4