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