利用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 /…...
【足球走地软件】走地数据分析预测【大模型篇】走地预测软件实战分享
了解什么是走地数据? 走地数据分析,在足球赛事的上下文中,是一种针对正在进行中的比赛进行实时数据分析的方法。这种方法主要用于预测比赛中的某些结果或趋势,如总进球数、比分变化、球队表现等。 在足球走地数据分析中…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
