#!/usr/bin/python3.7
importpsutilimporttimeimportos, requestsimportjson
monitor_name= {'nginx','supervisord'}
monitor_map={'httpd': 'systemctl start nginx','supervisord': 'systemctl restart supervisord'}#钉钉自己人hook_url
url = 'https://oapi.dingtalk.com/robot/send?access_token=f4de0e432f10ec92d7ab59b09284f6a6e0c1785cfa6e17dc6604e70f92a33707'
#当前时间
current_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))whileTrue:#字典,无序
proc_dict ={}#集合,作用是去重,数据唯一,无序
proc_name =set()for p in psutil.process_iter(attrs=['pid', 'name']):
proc_dict[p.info['pid']] = p.info['name']
proc_name.add(p.info['name'])print(proc_dict)print('\n\n---------\n')print(proc_name)#网卡,可以得到网卡属性,连接数,当前流量等信息
#net = psutil.net_io_counters()
#bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
#bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
#print(u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent))
#print('-----------------------------进程信息-------------------------------------')
#查看系统全部进程
#for pnum in psutil.pids():
#p = psutil.Process(pnum)
#print(u"进程名 %-20s 内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " \
#% (p.name(), p.memory_percent(), p.status(), p.create_time()))
proc_stop= monitor_name -proc_nameifproc_stop:for p inproc_stop:#取出每一个没启动的服务名
p_status = '停止'p_name=p
data={"msgtype": "markdown","markdown": {"title": "监控信息","text": "#### %s \n" % current_time +
">##### 服务名 %s \n" % p_name +
">##### 状态 %s \n" % p_status +
"> ###### 正在尝试重新启动 \n"}}
headers= {'Content-Type': 'application/json ;charset=utf-8'}
send_data= json.dumps(data).encode('utf-8')#把字典类型的数据变成json的数据类型,这样才能支持中文
requests.post(url=url, data=send_data, headers=headers)
os.system(monitor_map[p])
proc_name=set()for p_new in psutil.process_iter(attrs=['pid', 'name']):
proc_name.add(p_new.info['name'])if p inproc_name:
p_status= '启动'data={"msgtype": "markdown","markdown": {"title": "监控信息","text": "#### %s \n" % current_time +
">##### 服务名 %s \n" % p_name +
">##### 状态 %s \n" % p_status +
"###### 重启成功 \n"}}
headers= {'Content-Type': 'application/json ;charset=utf-8'}
send_data= json.dumps(data).encode('utf-8')#把字典类型的数据变成json的数据类型,这样才能支持中文
requests.post(url=url, data=send_data, headers=headers)else:
p_status= '停止'data={"msgtype": "markdown","markdown": {"title": "监控信息","text": "#### %s \n" % current_time +
">##### 服务名 %s \n" % p_name +
">##### 状态 %s \n" % p_status +
"###### 启动失败 \n"}}
headers= {'Content-Type': 'application/json ;charset=utf-8'}
send_data= json.dumps(data).encode('utf-8')#把字典类型的数据变成json的数据类型,这样才能支持中文
requests.post(url=url, data=send_data, headers=headers)
time.sleep(2)