Python监测目录大小变化,并邮件通知

简介:根据目录大小的改变,来得知目录是否有修改或更新等,并第一时间发送邮件通知

             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不了解,遇到的问题可以问我,感谢使用!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博客网友陈浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值