標籤:mil span html headers stop 分享圖片 參考 obb article
最近看到一個DingTalk軟體機器人,覺得非常好,比起郵件、警示,舒服多了,特獻上代碼內容。
[[email protected] ~]# nohup python test.py & # 可以參考下篇文章,python進程構成一個systemd服務後台運行,每5秒監控更佳
1 #coding: utf-8 2 import psutil 3 import requests 4 import time 5 import os 6 import json 7 8 monitor_name = set([‘httpd‘,‘cobblerd‘]) # 使用者指定監控的服務進程名稱 9 10 proc_dict = {}11 proc_name = set() # 系統檢測的進程名稱12 monitor_map = {13 ‘httpd‘: ‘systemctl restart httpd‘,14 ‘cobblerd‘: ‘systemctl restart cobblerd‘ # 系統在進程down掉後,自動重啟15 }16 17 dingding_url = ‘https://oapi.dingtalk.com/robot/send?access_token=b5258c4335ed8ab792075013c965efcbf4f8940f92e7bd936cdc7842d3bf9405‘18 # DingTalk機器人token使用參考文檔:http://www.pc6.com/infoview/Article_108931.html19 20 while True:21 for proc in psutil.process_iter(attrs=[‘pid‘,‘name‘]):22 proc_dict[proc.info[‘pid‘]] = proc.info[‘name‘]23 proc_name.add(proc.info[‘name‘])24 25 proc_stop = monitor_name - proc_name # 通過集合的形式來找出停掉的進程名,前者有但是後者沒有的26 27 if proc_stop: # 如果確實有監控的進程停掉了,那麼我們需要警示以及自動重啟功能28 for p in proc_stop:29 p_status = ‘停止‘30 p_name = p31 data = {32 "msgtype": "markdown",33 "markdown": {34 "title": "監控資訊",35 "text": "### %s\n" % time.strftime("%Y-%m-%d %X") +36 "> #### 服務名:%s \n\n" % p_name +37 "> #### 狀態:%s \n\n" % p_status +38 "> #### 正在嘗試啟動"39 },40 }41 headers = {‘Content-Type‘:‘application/json;charset=UTF-8‘}42 send_data = json.dumps(data).encode(‘utf-8‘)43 requests.post(url=dingding_url,data=send_data,headers=headers)44 45 os.system(monitor_map[p_name]) # 執行重啟命令,然後判斷是否重啟成功46 proc_set = set()47 for proc_again in psutil.process_iter(attrs=[‘pid‘,‘name‘]):48 proc_set.add(proc_again.info[‘name‘])49 50 if p in proc_set: # 如果進程啟動成功,p是以前停掉的進程,proc_set是已經重啟過一次後的所有進程集合51 p_status = ‘成功‘52 p_name = p53 data = {54 "msgtype": "markdown",55 "markdown": {56 "title": "監控資訊",57 "text": "### %s\n" % time.strftime("%Y-%m-%d %X") +58 "> #### 服務名:%s \n\n" % p_name +59 "> #### 狀態:%s \n\n" % p_status +60 "> #### 已經啟動成功,服務正在運行!"61 },62 }63 headers = {‘Content-Type‘:‘application/json;charset=UTF-8‘}64 send_data = json.dumps(data).encode(‘utf-8‘)65 requests.post(url=dingding_url,data=send_data,headers=headers)66 else:67 p_status = ‘重啟失敗‘68 p_name = p69 data = {70 "msgtype": "markdown",71 "markdown": {72 "title": "監控資訊",73 "text": "### %s\n" % time.strftime("%Y-%m-%d %X") +74 "> #### 服務名:%s \n\n" % p_name +75 "> #### 狀態:%s \n\n" % p_status +76 "> #### Sorry,服務啟動失敗鳥!"77 },78 }79 headers = {‘Content-Type‘:‘application/json;charset=UTF-8‘}80 send_data = json.dumps(data).encode(‘utf-8‘)81 requests.post(url=dingding_url,data=send_data,headers=headers)82 time.sleep(5)
DingTalk軟體結果圖片
2018-4-26 Python實現對服務進程的監控,警示給DingTalk機器人及重啟任務