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

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

看效果:

 话不多说,直接上源码:

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

pip install psutil

mail.py

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文件

crontab -e

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

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任务:

crontab -l

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/556781.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Seal^_^【送书活动第一期】——《Vue.js+Node.js全栈开发实战(第2版)》

Seal^_^【送书活动第一期】——《Vue.jsNode.js全栈开发实战(第2版)》 一、参与方式二、本期推荐图书2.1 前 言2.2 作者简介2.3 图书简介2.4 本书特色2.5 编辑推荐2.6 书籍目录 三、正版购买 一、参与方式 1、关注博主的账号。 2、点赞、收藏、评论博主的…

C++练级之路——类和对象(下)

目录 1、构造函数初始化列表 2、类型转换 3、explicit关键字 4、static成员 5、友元 友元函数 友元类 6、内部类 7、匿名对象 8、拷贝构造时的一些编译器优化 差不多结束了,类和对象! 1、构造函数初始化列表 初始化列表:以一个冒号…

了解MySQL的复制

了解MySQL的复制 MySQL的复制允许数据从一个MySQL数据库服务器(主服务器)复制到一个或多个MySQL数据库服务器(从服务器)。复制在数据库的扩展性和数据备份方面扮演着重要角色,特别是在大型企业和高可用性的应用场景中…

时序预测 | Transformer时间序列预测 Matlab代码

文章目录 效果一览文章概述源码设计参考资料 效果一览 文章概述 1.时序预测 | Transformer时间序列预测 Matlab代码 2.单变量时间序列预测; 3.多指标评价,评价指标包括:R2、MAE、MBE等,代码质量极高; 4.excel数据&…

Git使用总结(不断更新中)

branch 本地分支操作 删除本地分支 git branch -d <local-branch-name>远端分支操作 从远端分支创建本地分支 git checkout -b <local-branch-name> origin/<remote-branch-name>git ignore 如果工程的代码文件中有不希望上传到远端的文件&#xff0c;…

Java数据类型以及范围

数据类型&#xff1a; 取值范围&#xff1a; 取值&#xff1a;

将 Notepad++ 添加到右键菜单

目录 方式一&#xff1a;添加注册表&#xff08;手动&#xff09; 方式二&#xff1a;添加注册表&#xff08;一键添加&#xff09; 有时安装了notepad后&#xff0c;在txt文件上右键&#xff0c;在弹出的菜单栏中没有【通过 Notepad 打开】&#xff0c;如下&#xff1a; 这…

c语言基础总结

1. c语言概述 c语言是计算机编程语言的一种&#xff0c;编程语言用于人和机器交流。 1.1 c语言特点 简洁 ​ c语言的语法简单&#xff0c;语句清晰明了&#xff0c;使得程序易于阅读和理解 高效 ​ c语言的执行效率高&#xff0c;可以用于开发需要高性能的应用程序 可移…

[C++][算法基础]求约数(试除法)

给定 n 个正整数 &#xff0c;对于每个整数 &#xff0c;请你按照从小到大的顺序输出它的所有约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数 。 输出格式 输出共 n 行&#xff0c;其中第 i 行输出第 i 个整数 的所有约数。 数据范围 1≤…

Django模型的字段类型

Django模型中最重要并且也是唯一必须执行的就是字段定义。字段在类中进行定义&#xff0c;对应于实体数据库的字段。另外&#xff0c;定义模型字段名时为了避免冲突&#xff0c;不建议使用模型API中已经定义的关键字。 字段类型用以指定数据库的数据类型&#xff0c;例如Integ…

瑞芯微RK3328(ROC-RK3328-PC)buildroot 开发QT的hello world

第一部分&#xff1a;编译rk3328 sdk 0. 环境 - EC-R3328PC&#xff08;ROC-RK3328-PC&#xff09; - ubuntu18&#xff08;100GB&#xff09; 1. 安装依赖 sudo apt-get updatesudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools devi…

C++ //练习 12.26 用allocator重写第427中的程序。

C Primer&#xff08;第5版&#xff09; 练习 12.26 练习 12.26 用allocator重写第427中的程序。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /************************************************************************…

Linux入门攻坚——19、sed入门、bash脚本编程续

sed&#xff1a;Stream EDitor&#xff0c;流编辑器&#xff0c;行编辑器&#xff1a;实现文本编辑时是逐行进行的。 用法&#xff1a; sed [option]... script inputfile... script&#xff1a;‘地址命令’&#xff0c;如1,4d sed是将文件内容读取后放入自己的编辑…

Junit 历史-ApiHug准备-测试篇-008

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 背景 J…

【人工智能书籍】一本书读懂AIGC:ChatGPT、AI绘画、智能文明与生产力变革(PDF分享)

今天又来给大家推荐一本人工智能方面的书籍<一本书读懂AIGC&#xff1a;ChatGPT、AI绘画、智能文明与生产力变革>。本书以通俗易懂的方式从各个层面介绍了AIGC的基础知识&#xff0c;并辅以大量案例引领读者了解AIGC的应用实践&#xff0c;让读者可以更快速地利用AIGC改善…

02节-51单片机-LED模块

文章目录 1.点亮一个LED灯2.LED闪烁3.LED流水灯 1.点亮一个LED灯 #include <REGX52.H> void main() {P20xFE; //1111 1110while(1){} }2.LED闪烁 增加延时&#xff0c;控制LED的亮灭间隙 延时函数的添加依靠STC-ISP软件的延时函数功能代码自动生成&#xff0c;如图 #i…

递归 python

↵一、简单理解 解决问题的一种方法&#xff0c;它将问题不断的分成更小的子问题&#xff0c;直到子问题可以用普通的方法解决。通常情况下&#xff0c;递归会使用一个不停调用自己的函数。 【注】&#xff1a;每一次递归调用都是在解决一个更小的问题&#xff0c;如此进行下…

数据库管理-第171期 Oracle是用这种方式确保读一致的(20240418)

数据库管理171期 2024-04-18 数据库管理-第171期 Oracle是用这种方式确保读一致的&#xff08;20240418&#xff09;1 基本概念2 用处3 注意事项总结 数据库管理-第171期 Oracle是用这种方式确保读一致的&#xff08;20240418&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#x…

Docker文档阅读笔记-How to Run GUI Based Applications inside Docker?

以后的文档阅读笔记不在一一介绍。以后只总结干货和重点。 Step 1 使用Systemctl命令启动docker服务&#xff1a; systemctl start docker // to start the docker service. systemctl status docker // to check the status . systemctl restart docke…

mybatis创建入门流程体验

mysql数据库中建表 drop table if exists tb_user;create table tb_user(id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varchar(30) );INSERT INTO tb_user VALUES (1, zhangsan, 123, 男, 北京); INSERT INTO tb_user …
最新文章