Python实现云备份进程状态监控与自动报警脚本
本文介绍了一个使用Python编写的云备份监控脚本,用于自动检查服务器数据库备份文件的生成及上传状态。脚本通过读取INI配置文件获取路径和邮件服务器信息,检查指定进程是否运行,并获取最新的备份文件列表。若发现异常,脚本将自动发送包含详细信息的邮件提醒管理员,确保备份任务正常执行。
本文提供了一个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.
['\n', 'Image Name PID Session Name Session# Mem Usage\n', '========================= ======== ================ =========== ============\n', 'Dropbox.exe 20484 Console 1 71,652 K\n', 'Dropbox.exe 23232 Console 1 2,456 K\n', 'Dropbox.exe 61120 Console 1 2,168 K\n']
'''
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 = '\n\t'.join(dropbox) + '\n\n' + '\n\t'.join(carboniteservice)
content.append("Process Check Result:\n\t" + 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 = "\nThe Backup files are:\n\t" + '\n\t'.join(files)
content.append(body)
return content
else :
content.append("DB Backup Failed")
body = "\nThe last backup sucessfull file is " + files[-1]
content.append(body)
return content
def main():
#server = 'smtp.office365.com'
#sender = 'online@netbraintech.com'
#receiver = ['gavin.yuan@netbraintech.com' , 'feng.liu@netbraintech.com']
#pwd = 'Netbrain12'
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:\test
[email]
server=smtp.office365.com
sender=xxxx@outlook.com
pwd=xxxxx
receiver=xx@outlook.com,xxxxx@gmail.com
以上即为本文介绍的完整内容,希望能为读者的学习或工作提供有价值的参考。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









