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