1. 程式人生 > >[Python Study Notes]進程信息(丁丁軟件監控進程,http-post)

[Python Study Notes]進程信息(丁丁軟件監控進程,http-post)

type markdown shell mes json itl con usr 重新啟動

‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘
>>文件: 進程信息.py
>>作者: liu yang
>>郵箱: [email protected]

‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys,os
import psutil

# http get/post
import requests
# 處理字符串
import json
# 獲取系統時間
import time

# 丁丁url
url = ‘https://oapi.dingtalk.com/robot/send?access_token=3d94c740a27d5f70da6acf2a1c9383b338ad5c562fbaece8d38595c405e7e6a9‘
# 轉換成當前的時間戳
time_now = time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(time.time()))
# 要監控的進程
monitor_name = {‘ufw‘}
# 要監控的進程,與shell語句對應,先定義為空
monitor_map={}
#要監控的服務名集合,{‘ufw‘: ‘service ufw start‘}
for m in monitor_name:
    monitor_map[m]=‘service ‘+m+‘ start‘

print(monitor_map)

# print(time_now)

# 顯示進程,分別得到進程字典{‘pid‘:‘name‘}和去重元祖()
def process_message():
    # 進程字典,保存pid,進程名的鍵值對
    proc_dict={}
    # 進程列表,保存去重的進程名稱
    proc_list=set()
    # psutil.Process(pid=4, name=‘System‘, started=‘2018-02-11 16:39:45‘)
    for p in psutil.process_iter(attrs=[‘pid‘,‘name‘]):
        proc_dict[p.info[‘pid‘]]=p.info[‘name‘]
        proc_list.add(p.info[‘name‘])
    print(proc_list)
    print(proc_dict)

    proc_stop = monitor_name - proc_list
    #proc_stop:提取出來哪一個進程沒有在當前操作系統下開啟
    if proc_stop:
        #當前沒有啟動的這個進程集合不為空,有服務死掉了
        for p in proc_stop:
            print("正在重新啟動%s"%p)
            #取出每一個沒有啟動的服務名
            p_status = ‘停止‘
            p_name = p
            data = {
                "msgtype": "markdown",
                "markdown": {
                "title":"監控訊息",
                "text": "#### %s\n" % time_now +
                 "> ##### 服務名: %s \n\n" % p_name +
                 "> ##### 狀態: %s \n" % p_status +
                 "> ##### 正在嘗試啟動"
                 }
            }
            headers = {‘Content-Type‘:‘application/json ; charset=UTF-8‘}
            send_data = json.dumps(data).encode(‘utf-8‘)
            requests.post(url=url,data=send_data,headers=headers)
            #post提交數據:提交的地址,提交的數據

            if sys.platform.lower()==‘linux‘:
                os.system(monitor_map[p])
            #函數不會給你返回值

            proc_name = set()

            for p2 in psutil.process_iter(attrs=[‘pid‘,‘name‘]):
                proc_name.add(p2.info[‘name‘])
                #操作系統下的所有進程名拿出來

            if p in proc_name:
                print("%s啟動成功"%p)
                p_status = ‘啟動‘
                data = {
                    "msgtype": "markdown",
                    "markdown": {
                    "title":"監控訊息",
                    "text": "#### %s\n" % time_now +
                     "> ##### 服務名: %s \n\n" % p_name +
                     "> ##### 狀態: %s \n" % p_status +
                     "> ##### 重啟成功"
                     }
                }
                headers = {‘Content-Type‘:‘application/json ; charset=UTF-8‘}
                send_data = json.dumps(data).encode(‘utf-8‘)
                requests.post(url=url,data=send_data,headers=headers)
            else:
                print("%s啟動失敗"%p)
                p_status = ‘停止‘
                data = {
                    "msgtype": "markdown",
                    "markdown": {
                    "title":"監控訊息",
                    "text": "#### %s\n" % time_now +
                     "> ##### 服務名: %s \n\n" % p_name +
                     "> ##### 狀態: %s \n" % p_status +
                     "> ##### 啟動失敗"
                     }
                }
                headers = {‘Content-Type‘:‘application/json ; charset=UTF-8‘}
                send_data = json.dumps(data).encode(‘utf-8‘)
                requests.post(url=url,data=send_data,headers=headers)
    time.sleep(2)

if __name__ == ‘__main__‘:

    while True:
        process_message()

[Python Study Notes]進程信息(丁丁軟件監控進程,http-post)