使用Python脚本检测服务器信息并定时发送至管理员邮箱

server/2024/11/9 16:33:19/

在日常的系统管理工作中,监测服务器的资源占用情况至关重要,我们需要及时获得通知以便采取相应措施。我新装了一台UbuntuServer服务器,写了一个可以定期收集服务器的CPU、内存、网络和磁盘信息,并通过邮件将这些信息发送给管理员的Python脚本,分享一下。

看效果:

 话不多说,直接上源码:

用到了psutil先安装一下需要的psutil库:

python">pip install psutil

mail.py

python">import psutil  
import smtplib  
from email.mime.text import MIMEText  
from email.mime.multipart import MIMEMultipart  
import datetime  # 配置SMTP服务器和邮箱信息  
smtp_server = # SMTP服务器地址  
smtp_port =   # SMTP服务器端口  
sender_email =    # 发件人邮箱  
password =    # 发件人邮箱密码  
receiver_email =  # 管理员邮箱  def get_system_info():  # 获取当前时间  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # CPU信息  cpu_count = psutil.cpu_count(logical=False)  cpu_percent = psutil.cpu_percent(interval=1)  # 内存信息  memory = psutil.virtual_memory()  mem_total = round(memory.total / (1024.0 ** 3), 2)  mem_used = round(memory.used / (1024.0 ** 3), 2)  mem_percent = memory.percent  # 网络信息  net_io_counters = psutil.net_io_counters()  bytes_sent = round(net_io_counters.bytes_sent / (1024.0 ** 3), 2)  bytes_recv = round(net_io_counters.bytes_recv / (1024.0 ** 3), 2)  # 磁盘信息  disk_usage = psutil.disk_usage('/')  disk_total = round(disk_usage.total / (1024.0 ** 3), 2)  disk_used = round(disk_usage.used / (1024.0 ** 3), 2)  disk_percent = disk_usage.percent# 格式化信息  system_info = f"""  Time: {now}  CPU Count: {cpu_count}  CPU Usage: {cpu_percent}%  Memory Total: {mem_total} GB  Memory Used: {mem_used} GB  Memory Usage: {mem_percent}%  Bytes Sent: {bytes_sent} GB  Bytes Received: {bytes_recv} GB  Disk Total: {disk_total} GB  Disk Used: {disk_used} GB  Disk Usage: {disk_percent}%  """  return system_info  def send_email(subject, body, sender, password, receiver):  msg = MIMEMultipart()  msg['From'] = sender  msg['To'] = receiver  msg['Subject'] = subject  msg.attach(MIMEText(body, 'plain'))  server = smtplib.SMTP(smtp_server, smtp_port)  server.starttls()  server.login(sender, password)  text = msg.as_string()  server.sendmail(sender, receiver, text)  server.quit()  # 获取系统信息  
system_info = get_system_info()  # 发送邮件  
subject = 'UbuntuServer System Information'  
send_email(subject, system_info, sender_email, password, receiver_email)

注意画框的部分要写填你自己的信息

把mail.py复制下来,现在可以运行测试一下,运行一次即可向管理员邮箱发一次信息。

再打开命令行使用corn让它定时运行:

编辑当前用户的crontab文件

bash">crontab -e

打开编辑器中,添加任务(写你自己的路径)

bash">0 */2 * * * /path/to/your/script/mail.py

这行的含义是:

  • 0 表示在每小时的第0分钟运行。
  • */2 表示每两个小时。
  • * 表示每天的任意一天。
  • * 表示每个月的任意一月。
  • * 表示每周的任意一周。
  • /path/to/your/script/mail.py 是你的mail.py脚本的完整路径。

我设置的是两个小时执行一次,确保将/path/to/your/script/mail.py替换为你的mail.py脚本的实际路径。

保存并关闭文件后,cron会自动加载新的定时任务。你可以使用以下命令来查看当前用户的cron任务:

bash">crontab -l

如果设置成功就可以等待接收邮件了


http://www.ppmy.cn/server/1774.html

相关文章

如何搭建高效安全的eBay测评环境:步骤与要点解析

eBay测评环境的搭建是一个复杂且需要细致考虑的过程,主要涉及到技术配置和资源准备。以下是一些关键的步骤和要点: 一、资源准备: 1.养号系统及软件:选择稳定、可靠的养号系统,确保能够模拟真实用户行为,…

借助 AI 对话文档:100% 私密且无数据泄漏 | 开源日报 No.224

zylon-ai/private-gpt Stars: 50.0k License: Apache-2.0 PrivateGPT 是一个可以与您的文档进行交互的项目,利用 GPT 的强大功能,100% 私密且无数据泄漏。 提供 API 支持构建私密、上下文感知的 AI 应用程序遵循和扩展 OpenAI API 标准支持普通和流式响…

C++设计模式|创建型 1.单例模式

1.什么是单例模式? 单例模式的的核⼼思想在创建类对象的时候保证⼀个类只有⼀个实例,并提供⼀个全局访问点来访问这个实例。 只有⼀个实例的意思是,在整个应⽤程序中,只存在该类的⼀个实例对象,⽽不是创建多个相同类…

【Rust】——Cargo工作空间

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…

P8707 [蓝桥杯 2020 省 AB1] 走方格

# [蓝桥杯 2020 省 AB1] 走方格 ## 题目描述 在平面上有一些二维的点阵。 这些点的编号就像二维数组的编号一样,从上到下依次为第 $1$ 至第 $n$ 行,从左到右依次为第 $1$ 至第 $m$ 列,每一个点可以用行号和列号来表示。 现在有个人站在第…

vscode 配置go环境

https://www.zhihu.com/question/486786946/answer/2723663432 注意一定要安装最新版,否则不容易debug //main.go package main //说明hello.go这个文件在main这个包中import "fmt" //导入内置包,可以使用其中函数等func main() {fmt.Println("Hello…

简单工厂模式设计实验

实验内容: 楚锋软件公司欲基于Java 语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图、折线图等。楚锋软件公司图表库设计人员希望为应用系统开发人员提供一套灵活易用的图表库,而且可以较为…

(2022级)成都工业学院数据库原理及应用实验四: SQL简单查询

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求,请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询: 1、查询所有…