最近在做个人网站,但是由于服务器资源不足,偶尔会出现系统崩溃的现象,所以想写一个程序来实时监控系统状态。当系统资源占用过高时发送邮件提醒。

psutil(进程和系统实用程序)是一个跨平台的库,用于检索 Python中有关正在运行的进程和系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它主要用于系统监视,概要分析和限制进程资源以及管理正在运行的进程。

1、安装psutil

pip3 install psutil    # python2用户直接使用pip install psutil

2、创建get_system_info.py文件,获取系统状态

 import psutil as p

 def memory(): # 获取内存信息
info = p.virtual_memory()
return info[2] def disk(): # 获取磁盘使用情况
info = p.disk_usage('/')
return info[-1], info[-2] def cpu(): # 获取CPU使用率
info = p.cpu_percent(1)
return info

# 在此只使用了博主所需的相关功能,详细说明见https://pypi.org/project/psutil/

3、创建邮件发送send_Email.py文件

 import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import formataddr class send_Email():
def __init__(self, mail_host, mail_port, mail_user, mail_pass, sender):
self.mail_host = mail_host
self.mail_port = mail_port
self.mail_user = mail_user
self.mail_pass = mail_pass
self.sender = sender def make_mail(self, title, code, receiver): # 生成邮件
mail_msg = """
<h1>%s</h1>
<p>%s</p>
""" % (title, code)
self.message = MIMEText(mail_msg, "html", "utf-8")
self.message['From'] = formataddr(["XX", self.sender])
self.message['To'] = formataddr(["User", receiver])
subject = title
self.message['Subject'] = Header(subject, "utf-8") def send(self, receiver, title, code): # 发送邮件
status = 0
self.make_mail(title, code, receiver)
try:
self.smtpObj = smtplib.SMTP_SSL(self.mail_host, self.mail_port)
# print(1)
self.smtpObj.login(self.mail_user, self.mail_pass)
# print(2)
self.smtpObj.sendmail(self.sender, [receiver], self.message.as_string())
self.smtpObj.quit()
status = 1
except smtplib.SMTPException as e:
print("Error! 无法发送邮件!!!" + e)
return status

4、整合代码

from send_Email import send_Email
import get_system_info as gsi email = send_Email("smtp.163.com", 465, "*******@***.com", "**********", "********@***.com") # 初始化
memory = gsi.memory()
disk, capacity = gsi.disk()
info = str(memory)+" "+str(disk)+" "+str(round(capacity/1024/1024/1024, 2))
email.send(code=info, title="系统状态异常", receiver="*******@***.***")
status_d = 0
status_m = 0
while True: # 实时检测系统状态,会占用一定的系统资源
memory = gsi.memory()
disk, capacity = gsi.disk()
if memory >= 80 and status_m == 0:
status_m = 1
data = "当前内存占用率为"+str(memory)+"%,建议清理或扩充内存!"
email.send(code=data, title="系统状态异常", receiver="*******@***.***")
elif memory < 80:
status_m = 0
if disk >= 80 and status_d == 0:
status_d = 1
data = "当前硬盘已使用"+str(disk)+"%,剩余"+str(round(capacity/1024/1024/1024, 2))+"GB,请及时扩充!"
email.send(receiver="*******@***.***", title="系统状态异常", code=data)
elif disk < 80:
status_d = 0
if memory >= 90 and status_m == 1:
status_m = 2
data = "当前内存占用率为"+str(memory)+"%,建议清理或扩充内存!"
email.send(code=data, title="系统状态异常", receiver="*******@***.***")
elif memory < 90:
status_m = 1
if disk >= 90 and status_d == 1:
status_d = 2
data = "当前硬盘已使用"+str(disk)+"%,剩余"+str(round(capacity/1024/1024/1024, 2))+"GB,请及时扩充!"
email.send(receiver="*******@***.***", title="系统状态异常", code=data)
elif disk < 90:
status_d = 1

程序仍有不足之处,请大佬多多指教。

版权声明:该文章内容为作者原创,更多相关内容请去博主的网站lizaza.cn 查看

使用Python创建一个系统监控程序--李渣渣(lizaza.cn)的更多相关文章

  1. 使用Python创建一个简易的Web Server

    Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...

  2. 【LINUX】——linux如何使用Python创建一个web服务

    问:linux如何使用Python创建一个web服务? 答:一句话,Python! 一句代码: /usr/local/bin/python -m SimpleHTTPServer 8686 > ...

  3. 如何使用 Python 创建一个 NBA 得分图?

    本文意在创建一个得分图,该图同时描绘了从场上不同位置投篮得分的百分比和投篮次数,这和 Austin Clemen 个人网站上的帖子 http://www.austinclemens.com/shotc ...

  4. python 创建一个实例:步骤一 编写一个构造函数

    编写一个构造函数 #在python中,person 类的第一件是就是记录关于人员的基本信息,这叫做实例对象属性,并且它们通常通过给类方法函数中的self 属性赋值来创建. #赋给实力属性第一个值得通常 ...

  5. Python创建一个简单的区块链

    区块链(Blockchain)是一种分布式账本(listributed ledger),它是一种仅供增加(append-only),内容不可变(immutable)的有序(ordered)链式数据结构 ...

  6. Python 创建一个Django项目

    1 环境搭建及创建 1) 安装Django 方法一:pip install django 方法二:Pycharm File--settings--Project--Python Interpreter ...

  7. Python>>>创建一个简单的3D场景

    首先安装PyOpengl pip install PyOpenGL PyOpenGL_accelerate

  8. python创建一个线程和一个线程池

    创建一个线程 1.示例代码 import time import threading def task(arg): time.sleep(2) while True: num = input('> ...

  9. Python爬虫篇(代理IP)--lizaza.cn

    在做网络爬虫的过程中经常会遇到请求次数过多无法访问的现象,这种情况下就可以使用代理IP来解决.但是网上的代理IP要么收费,要么没有API接口.秉着能省则省的原则,自己创建一个代理IP库. 废话不多说, ...

随机推荐

  1. Java中常量的概念

    常量:在程序执行过程中,其值不发生改变的量.分类:A:字面值常量B:自定义常量字面值常量A:字符串常量(用“”括起来的内容).举例:"hello"B:整数常量 (所有的整数)举例: ...

  2. Vue自定义指令 数据传递

    在项目开发过程中,难免会遇到各种功能需要使用Vue自定义指令--directive 去实现 .关于directive的使用方式这里就不做过多的介绍了,Vue官方文档中说的还是听明白的.今天讲讲在使用V ...

  3. pytorch 中序列化容器nn.Sequential

    按下图顺序搭建以及执行

  4. 报错:require_once cannot allocate memory----php,以前自己弄的稍微有点特殊的开发环境

    最近出现过一个问题,值得记录 类似于这样的报错的问题: Warning: require_once(/www/app/somecomponent.php): failed to open stream ...

  5. Ubuntu下的eclipse配置MapReduce

    下载配置文件: 链接:https://pan.baidu.com/s/13vatPHpDP5HaW0mKuHydUA提取码:pjxi 1)启动hadoop cd /usr/local/hadoop . ...

  6. linux php 安装 openssl扩展

    (1.生成 openssl.so 文件)#进入扩展目录cd /data/soft/php-5.5.38/ext/openssl#生成 configure 文件/usr/local/php/bin/ph ...

  7. 2019-2020-1 20199329《Linux内核原理与分析》第四周作业

    <Linux内核原理与分析>第四周作业 一.上周问题总结: 虚拟机环境缺少部分库文件 书本知识使用不够熟练 二.本周学习内容: 1.实验楼环境使用gdb跟踪调试内核 1.1 在该环境下输入 ...

  8. 2019-2020-1 20199328《Linux内核原理与分析》第九周作业

    笔记部分 2019/11/12 14:45:44 从CPU和内存的角度看linux系统的运行 CPU角度:首先我们进行了系统调度,然后系统进入内核态,把信息压栈,然后我们进行进程管理,由于进入系统调用 ...

  9. C# richtextbox 自动下拉到最后 方法 & RichTextBox读取txt中文后出现乱码

    C# richtextbox 自动滚动到最后  光标到最后 自动显示最后一行 private void richTextBox1_TextChanged(object sender, EventArg ...

  10. CC视频CTO栗伟:CDN系统架构及CC视频应用实践

    2017 年 11 月9日,CC视频获2.08 亿元C轮融资. EGO 北京分会会员.CC视频CTO栗伟获邀作为 EGO 线上分享第三季嘉宾,与大家交流了CDN系统架构及CC 视频的应用实践. \\ ...