当前位置:
首页 > temp > 简明python教程 >
-
使用Python创建一个系统监控程序
最近在做个人网站,但是由于服务器资源不足,偶尔会出现系统崩溃的现象,所以想写一个程序来实时监控系统状态。当系统资源占用过高时发送邮件提醒。
psutil(进程和系统实用程序)是一个跨平台的库,用于检索 Python中有关正在运行的进程和系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它主要用于系统监视,概要分析和限制进程资源以及管理正在运行的进程。
1、安装psutil
pip3 install psutil # python2用户直接使用pip install psutil
2、创建get_system_info.py文件,获取系统状态
1 import psutil as p
2
3
4 def memory(): # 获取内存信息
5 info = p.virtual_memory()
6 return info[2]
7
8
9 def disk(): # 获取磁盘使用情况
10 info = p.disk_usage('/')
11 return info[-1], info[-2]
12
13
14 def cpu(): # 获取CPU使用率
15 info = p.cpu_percent(1)
16 return info
# 在此只使用了博主所需的相关功能,详细说明见 https://pypi.org/project/psutil/
3、创建邮件发送send_Email.py文件
1 import smtplib
2 from email.header import Header
3 from email.mime.text import MIMEText
4 from email.utils import formataddr
5
6
7 class send_Email():
8 def __init__(self, mail_host, mail_port, mail_user, mail_pass, sender):
9 self.mail_host = mail_host
10 self.mail_port = mail_port
11 self.mail_user = mail_user
12 self.mail_pass = mail_pass
13 self.sender = sender
14
15 def make_mail(self, title, code, receiver): # 生成邮件
16 mail_msg = """
17 <h1>%s</h1>
18 <p>%s</p>
19 """ % (title, code)
20 self.message = MIMEText(mail_msg, "html", "utf-8")
21 self.message['From'] = formataddr(["XX", self.sender])
22 self.message['To'] = formataddr(["User", receiver])
23 subject = title
24 self.message['Subject'] = Header(subject, "utf-8")
25
26 def send(self, receiver, title, code): # 发送邮件
27 status = 0
28 self.make_mail(title, code, receiver)
29 try:
30 self.smtpObj = smtplib.SMTP_SSL(self.mail_host, self.mail_port)
31 # print(1)
32 self.smtpObj.login(self.mail_user, self.mail_pass)
33 # print(2)
34 self.smtpObj.sendmail(self.sender, [receiver], self.message.as_string())
35 self.smtpObj.quit()
36 status = 1
37 except smtplib.SMTPException as e:
38 print("Error! 无法发送邮件!!!" + e)
39 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
程序仍有不足之处,请大佬多多指教。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数