利用python检查磁盘空间使用情况
目录
一.前言
二.使用的库介绍
三.代码实现以及解析
3.1导入模块
3.2邮件发送函数 send_email
3.3检查磁盘空间函数 check_and_clean_disk
3.4主程序逻辑
四.致谢
一.前言
在信息技术飞速发展的今天,数据量的激增使得磁盘空间管理成为系统运维中的一项基础而关键的任务。磁盘空间的不足不仅会影响系统性能,更可能导致服务中断,给企业带来不可估量的损失。因此,及时准确地监控磁盘空间使用情况,对于保障系统稳定性和数据安全至关重要。
面对日益增长的存储需求,手动检查磁盘空间的方式不仅效率低下,而且容易出错。自动化磁盘空间检查成为了解决这一问题的必然选择。自动化工具可以24小时不间断地监控磁盘状态,一旦发现问题,立即发出警告,大大提高了运维的响应速度和准确性。
Python,作为一种简单易学且功能强大的编程语言,在系统管理领域有着广泛的应用。其丰富的库支持和灵活的脚本编写能力,使其成为实现自动化运维任务的理想选择。
本文将向读者展示如何利用Python编写自动化脚本,以检查磁盘空间使用情况。无论你是经验丰富的系统管理员,还是对Python自动化充满兴趣的开发者,本文都将为你提供实用的脚本示例和详细的解析步骤,帮助你快速掌握磁盘空间监控的自动化方法。
二.使用的库介绍
os: 提供了与操作系统交互的功能,如执行命令和操作文件系统。shutil: 提供了高级的文件操作功能,如复制、移动和删除文件。glob: 用于通过通配符查找文件路径名。smtplib,MIMEText,Header: 用于发送电子邮件的相关模块和类。
三.代码实现以及解析
import os
import shutil
import glob
import smtplib
from email.mime.text import MIMEText
from email.header import Header# 邮件发送函数
def send_email(subject, message, to_email):from_email = "your_email@example.com"email_password = "your_email_password"msg = MIMEText(message, 'plain', 'utf-8')msg['From'] = Header(from_email)msg['To'] = Header(to_email)msg['Subject'] = Header(subject)try:server = smtplib.SMTP('smtp.example.com', 587)server.starttls()server.login(from_email, email_password)server.sendmail(from_email, [to_email], msg.as_string())server.quit()print("邮件发送成功")except smtplib.SMTPException as e:print("错误:无法发送邮件", e)# 检查磁盘空间并清理
def check_and_clean_disk(space_threshold=80, log_dir='/path/to/logs'):total, used, free = os.popen('df -h /').readlines()[1].split()usage_percent = int(used.strip('%')) # 获取磁盘使用率if usage_percent > space_threshold:print(f"磁盘使用率 {usage_percent}% 超过阈值 {space_threshold}%,开始清理。")# 清理操作:删除指定目录下30天前的日志文件for log_file in glob.glob(os.path.join(log_dir, '*.log')):if os.path.getctime(log_file) < time.time() - 30 * 86400:shutil.rmtree(log_file)print(f"删除旧日志文件:{log_file}")# 发送邮件通知send_email("磁盘空间清理通知",f"磁盘空间使用率超过 {space_threshold}%,已自动清理。当前使用率为:{usage_percent}%","admin_email@example.com")else:print(f"磁盘使用率正常:{usage_percent}%。")if __name__ == "__main__":check_and_clean_disk()
3.1导入模块
import os
import shutil
import glob
import smtplib
from email.mime.text import MIMEText
from email.header import Header
os: 提供了与操作系统交互的功能,如执行命令和操作文件系统。shutil: 提供了高级的文件操作功能,如复制、移动和删除文件。glob: 用于通过通配符查找文件路径名。smtplib,MIMEText,Header: 用于发送电子邮件的相关模块和类。
3.2邮件发送函数 send_email
def send_email(subject, message, to_email):from_email = "your_email@example.com"email_password = "your_email_password"msg = MIMEText(message, 'plain', 'utf-8')msg['From'] = Header(from_email)msg['To'] = Header(to_email)msg['Subject'] = Header(subject)try:server = smtplib.SMTP('smtp.example.com', 587)server.starttls()server.login(from_email, email_password)server.sendmail(from_email, [to_email], msg.as_string())server.quit()print("邮件发送成功")except smtplib.SMTPException as e:print("错误:无法发送邮件", e)
send_email函数负责发送邮件通知。它使用了SMTP协议连接到指定的邮件服务器,并使用TLS加密进行安全通信。- 在发送邮件之前,需要指定发件人邮箱和其对应的SMTP登录密码。建议将密码存储在安全的环境变量中,而不是直接硬编码在代码中。
- 函数捕获
smtplib.SMTPException异常,并在发送失败时打印错误信息。
3.3检查磁盘空间函数 check_and_clean_disk
def check_and_clean_disk(space_threshold=80, log_dir='/path/to/logs'):total, used, free = os.popen('df -h /').readlines()[1].split()usage_percent = int(used.strip('%')) # 获取磁盘使用率if usage_percent > space_threshold:print(f"磁盘使用率 {usage_percent}% 超过阈值 {space_threshold}%,开始清理。")# 清理操作:删除指定目录下30天前的日志文件for log_file in glob.glob(os.path.join(log_dir, '*.log')):if os.path.getctime(log_file) < time.time() - 30 * 86400:shutil.rmtree(log_file)print(f"删除旧日志文件:{log_file}")# 发送邮件通知管理员send_email("磁盘空间清理通知",f"磁盘空间使用率超过 {space_threshold}%,已自动清理。当前使用率为:{usage_percent}%","admin_email@example.com")else:print(f"磁盘使用率正常:{usage_percent}%。")
check_and_clean_disk函数用于检查磁盘使用率,并在超过指定阈值时进行清理操作。- 使用
os.popen('df -h /').readlines()[1].split()获取并解析磁盘空间信息,从中提取使用率百分比。 - 如果磁盘使用率超过
space_threshold,则执行清理操作:删除指定目录下30天前的日志文件。 - 在清理后,调用
send_email函数发送邮件通知管理员。
3.4主程序逻辑
if __name__ == "__main__":check_and_clean_disk()
- 在
if __name__ == "__main__":块中,调用check_and_clean_disk()函数,作为程序的入口点,开始执行磁盘空间检查和清理操作。
四.致谢
非常感谢您阅读我的博客!如果您有任何问题、建议或想了解特定主题,请随时告诉我。您的反馈对我非常重要,我将继续努力提供高质量的内容。
如果您喜欢我的博客,请考虑订阅我们的更新,这样您就不会错过任何新的文章和信息。同时,欢迎您分享我们的博客给更多的朋友和同事,让更多人受益。
再次感谢您的支持和关注!如果您有任何想法或需求,请随时与我们联系。祝您生活愉快,学习进步!
相关文章:
利用python检查磁盘空间使用情况
目录 一.前言 二.使用的库介绍 三.代码实现以及解析 3.1导入模块 3.2邮件发送函数 send_email 3.3检查磁盘空间函数 check_and_clean_disk 3.4主程序逻辑 四.致谢 一.前言 在信息技术飞速发展的今天,数据量的激增使得磁盘空间管理成为系统运维中的一项基…...
卷积神经网络(五)---图像增强的方法
前面的部分专注于卷积神经网络的层结构介绍,同时还介绍了到目前为止比较出名的卷积神经网络,接着使用比较复杂的卷积神经网络提高了 MNIST 数据集的准确率。下面将从另外的角度——图像增强的方面入手,提高模型的准确率和泛化能力。 一直以来…...
矩阵常见分解算法及其在SLAM中的应用
文章目录 常见特殊矩阵定义Cholesky分解(正定Hermittian矩阵,分解结果唯一)Cholesky分解应用 SVD分解(将singularvalues排序后分解唯一)SVD 分解的应用(任意矩阵) QR分解(任意矩阵&a…...
【排序】快速排序详解
✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:排序 个人主页:Celias blog~ 一、快速排序的思想 快速排序的核心思想是: 选定一个…...
贪心算法总结(2)
一、买卖股票的最佳时机 . - 力扣(LeetCode) class Solution { public:int maxProfit(vector<int>& prices) {int miniINT_MAX;int ret0;for(int&price:prices){//遍历的时候,我们随时去更新最小的值,然后让每一位…...
弘景光电:技术实力与创新驱动并进
在光学镜头及摄像模组产品领域,广东弘景光电科技股份有限公司(以下简称“弘景光电”)无疑是一颗耀眼的明星。自成立以来,弘景光电凭借其强大的研发实力、卓越的产品性能、精密的制造工艺以及严格的质量管理体系,在光学…...
2024年7月23日~2024年7月29日周报
目录 一、前言 二、完成情况 2.1 一种具有边缘增强特点的医学图像分割网络 2.2 融合边缘增强注意力机制和 U-Net 网络的医学图像分割 2.3 遇到的困难 三、下周计划 一、前言 上周参加了一些师兄师姐的论文讨论会议,并完成了初稿。 本周继续修改论文࿰…...
M3U8流视频数据爬虫
M3U8流视频数据爬虫 HLS技术介绍 现在大部分视频客户端都采用HTTP Live Streaming(HLS,Apple为了提高流播效率开发的技术),而不是直接播放MP4等视频文件。HLS技术的特点是将流媒体切分为若干【TS片段】(比如几秒一段…...
保护您的数字财富:模块化沙箱在源代码防泄露中的突破
在数字化浪潮中,企业面临着前所未有的数据安全挑战。源代码、商业机密、客户数据……这些宝贵的数字资产一旦泄露,后果不堪设想。SDC沙盒防泄密系统,以其卓越的技术实力和创新的解决方案,为企业提供了一个坚不可摧的安全屏障。 核…...
FFmpeg源码:avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析
一、引言 AVIOContext是FFmpeg(本文演示用的FFmpeg源码版本为5.0.3)中的字节流上下文结构体,用来管理输入输出数据。打开一个媒体文件的时候,需要先把数据从硬盘读到缓冲区,然后会用到AVIOContext中的如下成员&#x…...
如何使用 API 查看极狐GitLab 镜像仓库中的镜像?
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...
软件-vscode-plantUML-IDEA
文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接) PlantUMLIDEA下载及安装Eval Reset插件配置修改IDEA创建项目的默认目录IDEA配置gitIDEA翻译插件translationIDEA断点调试IDEA全局搜索快捷键不能使用代…...
ES6语法详解,面试必会,通俗易懂版
目录 Set的基本使用WeakSet 使用Set 和 WeakSet 区别内存泄漏示例:使用普通 Set 保存 DOM 节点如何避免这个内存泄漏MapWeakMap 的使用 Set的基本使用 在ES6之前,我们存储数据的结构主要有两种:数组、对象。 在ES6中新增了另外两种数据结构&a…...
CTFshow--Web--代码审计
目录 web301 web302 web303 web304 web305 web306 web307 web308 web309 web310 web301 开始一个登录框, 下意识sql尝试一下 发现 1 的时候会到一个 checklogin.php 的路径下, 但啥也没有 好吧, 这是要审计代码的 ,下载好源码, 开始审计 看了一下源码 , 应该就是sql…...
Java语言程序设计——篇十(1)
🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 接口介绍 接口概述接口定义接口的实现实战演练 👅接口的继承实战演练实战演练 接口的类型常量实战演练 静态方法默认方法解决默认方…...
Qt对比MFC优势
从Qt小白到现在使用了有四年的时间,之前也搞过MFC,WinForm,基本上都是桌面的框架, 从难易程度看MFC>QT>WinForm; 运行的效率上来看MFC>QT>WinForm; 开发效率上WinForm>QT>MFC; 跨平台Qt首选; 界面的美观难易程度Qt>…...
RuntimeError: No CUDA GPUs are available
RuntimeError: No CUDA GPUs are available 目录 RuntimeError: No CUDA GPUs are available 【常见模块错误】 【解决方案】 解决步骤如下: 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科…...
URL参数中携带中文?分享 1 段优质 JS 代码片段!
本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿! 大家好,我是大澈! 本文约 800 字,整篇阅读约需 1 分钟。 今天分享一段优质 JS 代码片段,在发送 ajax 请…...
sass的使用
一、变量 //声明一个变量 $highlight-color: #F90; .selected {border: 1px solid $highlight-color; }//编译后 .selected {border: 1px solid #F90; }二、导入 import "xxx.scss"三、混合器简单定义 通过mixin定义,通过include调用 // mixin.scss /…...
【足球走地软件】走地数据分析预测【大模型篇】走地预测软件实战分享
了解什么是走地数据? 走地数据分析,在足球赛事的上下文中,是一种针对正在进行中的比赛进行实时数据分析的方法。这种方法主要用于预测比赛中的某些结果或趋势,如总进球数、比分变化、球队表现等。 在足球走地数据分析中…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
