使用Python建立一個系統監控程式--李渣渣(lizaza.cn)

lizaza發表於2020-05-15

    最近在做個人網站,但是由於伺服器資源不足,偶爾會出現系統崩潰的現象,所以想寫一個程式來實時監控系統狀態。當系統資源佔用過高時傳送郵件提醒。

    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

程式仍有不足之處,請大佬多多指教。

版權宣告:該文章內容為作者原創,更多相關內容請去博主的網站lizaza.cn 檢視

相關文章