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

在日常的系统管理工作中,监测服务器的资源占用情况至关重要,我们需要及时获得通知以便采取相应措施。我新装了一台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

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

相关推荐
benchmark_cc2 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
潘正翔2 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
weigangwin3 小时前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
renhongxia13 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
Python+993 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
dunge20264 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
Dovis(誓平步青云)4 小时前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
专注_每天进步一点点4 小时前
SLB(绑定弹性公网ip)-gateway-业务pod,gateway上出现reset by peer,业务pod上没有reset by peer
服务器·tcp/ip·gateway
Java小白笔记5 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
ACP广源盛139246256736 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件