目录
[3.2邮件发送函数 send_email](#3.2邮件发送函数 send_email)
[3.3检查磁盘空间函数 check_and_clean_disk](#3.3检查磁盘空间函数 check_and_clean_disk)
一.前言
在信息技术飞速发展的今天,数据量的激增使得磁盘空间管理成为系统运维中的一项基础而关键的任务。磁盘空间的不足不仅会影响系统性能,更可能导致服务中断,给企业带来不可估量的损失。因此,及时准确地监控磁盘空间使用情况,对于保障系统稳定性和数据安全至关重要。
面对日益增长的存储需求,手动检查磁盘空间的方式不仅效率低下,而且容易出错。自动化磁盘空间检查成为了解决这一问题的必然选择。自动化工具可以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()
函数,作为程序的入口点,开始执行磁盘空间检查和清理操作。
四.致谢
非常感谢您阅读我的博客!如果您有任何问题、建议或想了解特定主题,请随时告诉我。您的反馈对我非常重要,我将继续努力提供高质量的内容。
如果您喜欢我的博客,请考虑订阅我们的更新,这样您就不会错过任何新的文章和信息。同时,欢迎您分享我们的博客给更多的朋友和同事,让更多人受益。
再次感谢您的支持和关注!如果您有任何想法或需求,请随时与我们联系。祝您生活愉快,学习进步!