zoukankan      html  css  js  c++  java
  • Python检查 文件备份是否正常 云备份进程是否正常运行

    场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功。

    实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒。

    #! /usr/bin/env python
    
    import os
    import time
    import smtplib
    
    from email.mime.text import MIMEText
    from email.header import Header
    
    from configparser import ConfigParser
    
    
    def SendMail(server,sender,pwd,receiver,msg):
        '''
        Conncet to Office365 mail server and sent emails
        
        '''
        email = smtplib.SMTP(server,587)
        email.starttls()
        email.ehlo(server)
        email.login(sender,pwd)
        email.sendmail(sender,receiver,msg)
        email.quit()
        
        
    def GetNewFiles(path,num):
        '''
        Get file lists and return the last num created files
        
        '''
        lists = os.listdir(path)
        lists.sort(key=lambda fn:os.path.getctime(path+'\'+fn))
        
        return lists[-num : ]
        
    def CheckProcess(name):
        '''
        Check if the process exits and return result.
        
        ['
    ', 'Image Name                     PID Session Name        Session#    Mem Usage
    ', '========================= ======== ================ =========== ============
    ', 'Dropbox.exe                  20484 Console                    1     71,652 K
    ', 'Dropbox.exe                  23232 Console                    1      2,456 K
    ', 'Dropbox.exe                  61120 Console                    1      2,168 K
    ']
        
        '''
        proc = []
        p = os.popen('tasklist /FI "IMAGENAME eq %s"' % name)
        for x in p:
            proc.append(x)
        p.close()
        return proc
        
    def MailContent(path,num):
        '''
        make the mail contents
        '''
        content = []
        
        dropbox = CheckProcess('dropbox.exe')
        carboniteservice = CheckProcess('carboniteservice.exe')
        
        #IF process doesn't run 
        if len(dropbox) < 2 or len(carboniteservice) < 2 :
            content.append("Dropbox or CarBonite doesn't run")
            s = '
    	'.join(dropbox) + '
    
    ' + '
    	'.join(carboniteservice)
            content.append("Process Check Result:
    	" + s)
            return content
        
        #Check if the backup files are correct.
        files = GetNewFiles(path,num)
        file_ctime = os.path.getctime(path + '\' + files[0])
        now = time.time() - 86400
        
        if file_ctime > now :
            content.append("DB Backup Successfull")
            body = "
    The Backup files are:
    	" + '
    	'.join(files)
            content.append(body)
            return content
        else :
            content.append("DB Backup Failed")
            body = "
    The last backup sucessfull file is " + files[-1]
            content.append(body)
            return content
            
    
        
    def main():
        
        #server = 'smtp.office365.com'
        #sender = '*****'
        #receiver = ['****' , '****']
        #pwd = '****'
        
        config = ConfigParser()
        config.read_file(open('config.ini'))
        path = config.get('os', 'path')
        receiver = config.get('email', 'receiver')
        server = config.get('email', 'server')
        sender = config.get('email', 'sender')
        pwd = config.get('email', 'pwd')
        
        content = MailContent(path,12)
        #content = MailContent("D:\test",6)
        mail_content = content[1]
        
        msg = MIMEText(mail_content, "plain", "utf-8")
        msg["Subject"] = Header(content[0], "utf-8")
        msg["From"] = sender
        msg["To"] = Header(receiver)
        
        SendMail(server,sender,pwd,receiver.split(','),msg.as_string())
    
    if __name__ == '__main__':
        main()
    

      

    ini配置文件内容

    [os]
    path=D:	est
    
    [email]
    server=smtp.office365.com
    sender=xxxx@outlook.com
    pwd=xxxxx
    receiver=xx@outlook.com,xxxxx@gmail.com
    

      

  • 相关阅读:
    面试题
    网络编程-1
    excel文件导入数据库--jxl包
    excel文件导入数据库
    1113 Integer Set Partition (25 分)集合分割
    1120 Friend Numbers (20 分)set的使用
    1099 Build A Binary Search Tree (30 分)
    1092 To Buy or Not to Buy (字符串删除)
    1127 ZigZagging on a Tree (30 分)树的层次遍历
    1155 Heap Paths (30 分)判断是否是一个堆
  • 原文地址:https://www.cnblogs.com/xingfuxiaokong/p/11393387.html
Copyright © 2011-2022 走看看