使用 Python 建立乙個系統監控程式

2021-10-06 08:17:14 字數 3650 閱讀 5091

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

psutil(程序和系統實用程式)是乙個跨平台的庫,用於檢索 python中有關正在執行的程序和系統利用率(cpu,記憶體,磁碟,網路,感測器)的資訊。它主要用於系統監視,概要分析和限制程序資源以及管理正在執行的程序。

1、安裝psutilpip3 install psutil # python2使用者直接使用pip install psutil

2、建立get_system_info.py檔案,獲取系統狀

1 import psutil as p23

4 def memory(): # 獲取記憶體資訊

5 info = p.virtual_memory()

6 return info[2]78

9 def disk(): # 獲取磁碟使用情況

10 info = p.disk_usage(』/』)

11 return info[-1], info[-2]

1213

14 def cpu(): # 獲取cpu使用率

15 info = p.cpu_percent(1)

16 return info# 在此只使用了博主所需的相關功能,詳細說明見 建立郵件傳送send_email.py檔案

1 import smtplib

2 from email.header import header

3 from email.mime.text import mimetext

4 from email.utils import formataddr56

7 class send_email():

8 definit(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

1415 def make_mail(self, title, code, receiver): # 生成郵件

16 mail_msg = 「」"

17 18

%s19 「」" % (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」)

2526 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 status4、整合**from send_email import send_emailimport get_system_info as gsiemail = 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 = 0status_m = 0while 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

程式仍有不足之處,請各位多多指教

python 動態建立乙個類

class animal def eat self print eat class dog animal pass wangcai dog wangcai.eat 輸出 eat cat type cat animal,xiaohuamao cat xiaohuamao.eat 輸出 eat 元類就是...

python建立乙個元類

其他我們建立乙個類目的是為了建立該類的例項物件,而元類就是用來建立類的。換個理解方式就是,元類就是建立類的類。在python中可以使用type函式建立乙個類,參考 python中type的用法 用法如下 tpye name,bases,dict 實際上type 函式就是乙個元類,是python預設用...

建立乙個python鍊錶

鍊錶是一種由一系列節點組成的資料結構,每個節點都有指向下個節點的指標。這種結構就不需要連續的記憶體去儲存,但只要找到起始節點 頭節點 整個鍊錶的資料都可以被依次訪問。在python3中,建立鍊錶的過程可以粗略分為定義單節點,定義空鍊錶,向空鍊錶填充資料幾個步驟 來自定義單節點 class node ...