使用Python创建一个系统监控程序(python 监控程序)

网友投稿 427 2022-06-24


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

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

18

%s

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

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:潘石屹首次Python考试成绩 99 分,失分点:画完图后忘了隐藏画笔的箭头(Python成绩)
下一篇:python发邮件和网络的简单使用(如何用python发邮件)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~