使用Python创建一个系统监控程序--李渣渣(lizaza.cn)

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

    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 查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值