linux服務監控與運維
- 一, 安裝psutil 包
- 二,找到作業系統中所有的服務的name和pid
- 三,找到需要監控但沒有啟動的服務
- 四,監控服務,如果沒有開啟則自動開啟,[并發郵件通知作業人員]
- 五,運行之后的效果:
- 六,[參考視頻鏈接](https://www.bilibili.com/video/BV1nW411i7J5)
一, 安裝psutil 包
1.1、安裝壓縮包:以root身份登陸CentOS依次 執行以下命令:
wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.gz
如果wget 下不下來,則直接在瀏覽器中復制 粘貼鏈接https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.gz 下載下來,用ftp傳輸工具傳輸到linux上,然后再進行下面的操作
1.2 解壓: tar zxvf psutil-2.1.3.tar.gz
1.3 進入解壓完的目錄:cd psutil-2.1.3/
1.4 啟動安裝: python3 setup.py install
1.5 驗證: 在命令視窗輸入 python3,然后 輸入 :
import psutil 不報錯,則證明安裝 成功
接著輸入:
res = psutil.process_iter()
for var in res:
? print(var)
則會顯示一堆資訊
二,找到作業系統中所有的服務的name和pid
import psutil
proc_dict = {}
#ID:行程名
proc_name = set()
#關于行程的集合,集合去重
for p in psutil.process_iter():
proc_dict[p.pid] = p.name()
proc_name.add(p.name())
print(proc_dict)
print('\n\n--------------------------\n')
print(proc_name)
三,找到需要監控但沒有啟動的服務
proc_stop = monitor_name - proc_name
即:需要監控的服務name 減去 作業系統中所有服務的name
四,監控服務,如果沒有開啟則自動開啟,[并發郵件通知作業人員]
使用os.system(命令)啟用 服務,完整代碼如下
import psutil
import os
#如果需要發郵件給通知管理人員可能需要使用 request 和 json
#import request
#import json
import time
time_now = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
#要監控的服務
monitor_name = {'nginx'}
#啟動命令
monitor_map = {'nginx':'service nginx start'}
while True:
#作業系統中所有行程的字典
proc_dict = {}
#作業系統中所有的行程名集合
proc_name = set()
#psutil.process_iter()會回傳作業系統下所有行程名及行程ID
for p in psutil.process_iter():
proc_dict[p.pid] = p.name()
proc_name.add(p.name())
print(proc_dict)
print('\n\n--------------------------\n')
print(proc_name)
# monitor_name - proc_name == died process name
#提取到那個監控行程沒有啟動
proc_stop = monitor_name - proc_name
print(proc_stop)
if proc_stop:
for p in proc_stop:
p_status = '停止'
p_name = p
data ={p_status,p_name,time_now}
headers = {'Content-Type':'application/json;charset=utf-8'}
#send_data = json.dumps(data).encode('utf-8')
#發郵件給管理人員
#request.post(url=url,data=send_data,headers=headers)
os.system(monitor_map[p])
proc_name = set()
for p2 in psutil.process_iter():
proc_name.add(p2.name())
if p in proc_name:
print("重啟成功")
else:
print("重啟失敗")
time.sleep(2000)
五,運行之后的效果:


六,參考視頻鏈接
感謝 b堆疊 up主 15112899479 的視頻講解
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294580.html
標籤:其他
下一篇:Docker部署環境使用介紹
