简介:根据目录大小的改变,来得知目录是否有修改或更新等,并第一时间发送邮件通知
python版本:3.6及以上,需安装支持PyYAML模块,运行环境:Linux和Windows都可以
config.yml配置文件
# This is configure to directroy.py
# 监控目录
dir:
path: /root/testdir
# 执行时间间隔(单位:秒)
time:
seconds: 60
#----------邮箱设置----------
# 是否启用发送邮件通知:true为是,false为否
# mailserver: 发送邮箱的媒介 username_send: 发送人 password: 邮箱授权码 username_to: 收件人邮箱,多个按照格式递增
# mail_body: 邮件内容
email:
switch: false
email_information:
mailserver: smtp.163.com
username_send:
password:
port: 25
username_to:
-
email_text:
mail_head:
mail_body:
directory.py代码
#!encoding=utf-8
"""
auth:chenhao
date:2022/10/26
dev-tools:PyCharm Community Edition 2022.1.1
python-version:3.10
"""
import os
import logging
import traceback
import yaml
import smtplib
from email.mime.text import MIMEText
logging.basicConfig(level=logging.INFO, filename=os.path.abspath(os.path.dirname(__file__)) + '/qaq.log',
format='%(asctime)s - %(funcName)s{} -%(levelname)s : %(message)s'.format("方法"))
try:
with open('./config.yml', 'r', encoding='utf8') as F:
read = yaml.load(F, Loader=yaml.FullLoader)
except yaml.YAMLError as E:
logging.error('yml文件格式错误!\n%s' % traceback.format_exc())
class Dirseize(object):
"""
References
"""
def __init__(self):
self.size = []
def dirsize(self, dirpath: str):
"""
Parameters
----------
dirpath:目录路径
Returns size
-------
"""
logging.info("进入获取目录大小的方法")
size = 0
for root, dirs, files in os.walk(dirpath):
for name in files:
size += sum([os.path.getsize(os.path.join(root, name))])
logging.info("获取到目录{0}的大小为{1}".format(dirpath, size))
self.size.append(size)
return size
if __name__ == '__main__':
"""main入口"""
from time import sleep
dsz = Dirseize()
while True:
dsz.dirsize(read['dir']['path'])
sleep(read['time']['seconds'])
dsz.dirsize(read['dir']['path'])
if dsz.size[1] != dsz.size[0]:
logging.info("当前时间段目录大小值:{0} {1}".format(dsz.size[1], dsz.size[0]))
logging.warning("目录大小发生变化!")
mailserver = read['email']['email_information']['mailserver']
username_send = read['email']['email_information']['username_send']
password = read['email']['email_information']['password']
for user in read['email']['email_information']['username_to']:
username_recv = user
mail = MIMEText(read['email']['email_text']['mail_body'])
mail['Subject'] = read['email']['email_text']['mail_head']
mail['From'] = username_send
mail['To'] = username_recv
smtp = smtplib.SMTP(mailserver, port=read['email']['email_information']['port'])
smtp.login(username_send, password)
smtp.sendmail(username_send, username_recv, mail.as_string())
smtp.quit()
dsz.size.clear()
else:
logging.info("当前时间段目录大小值:{0} {1}".format(dsz.size[1], dsz.size[0]))
logging.info("目录无变化")
dsz.size.clear()
运行方式:nohup python3 directroy.py &
qaq.log日志
2022-10-26 14:12:08,676 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:12:08,677 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为0
2022-10-26 14:12:38,706 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:12:38,707 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为0
2022-10-26 14:12:38,707 - <module>方法 -INFO : 当前时间段目录大小值:0 0
2022-10-26 14:12:38,707 - <module>方法 -INFO : 目录无变化
2022-10-26 14:12:38,707 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:12:38,707 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为0
2022-10-26 14:13:08,727 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:13:08,727 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为0
2022-10-26 14:13:08,727 - <module>方法 -INFO : 当前时间段目录大小值:0 0
2022-10-26 14:13:08,727 - <module>方法 -INFO : 目录无变化
2022-10-26 14:13:08,727 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:13:08,727 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为0
2022-10-26 14:13:38,749 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:13:38,750 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为79359567
2022-10-26 14:13:38,750 - <module>方法 -INFO : 当前时间段目录大小值:79359567 0
2022-10-26 14:13:38,750 - <module>方法 -WARNING : 目录大小发生变化!
2022-10-26 14:13:38,750 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:13:38,750 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为79359567
2022-10-26 14:14:08,764 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:14:08,765 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为79359567
2022-10-26 14:14:08,765 - <module>方法 -INFO : 当前时间段目录大小值:79359567 79359567
2022-10-26 14:14:08,765 - <module>方法 -INFO : 目录无变化
2022-10-26 14:14:08,765 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:14:08,765 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为79359567
2022-10-26 14:14:38,793 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:14:38,793 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为79359567
2022-10-26 14:14:38,794 - <module>方法 -INFO : 当前时间段目录大小值:79359567 79359567
2022-10-26 14:14:38,794 - <module>方法 -INFO : 目录无变化
2022-10-26 14:14:38,794 - dirsize方法 -INFO : 进入获取目录大小的方法
2022-10-26 14:14:38,794 - dirsize方法 -INFO : 获取到目录/root/testdir的大小为79359567
如果你对python不了解,遇到的问题可以问我,感谢使用!