网站/小程序/APP个性化定制开发,二开,改版等服务,加扣:8582-36016

本文通过详细介绍安装psutil包到查找操作系统所有服务进行ID,提取监控等内容,接下来我们大家一起来学习吧

一, 安装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


1

2

3

4

5

6

7

8

9

10

11

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)

三,找到需要监控但没有启动的服务

1

proc_stop = monitor_name - proc_name

即:需要监控的服务name 减去 操作系统中所有服务的name

四,监控服务,如果没有开启则自动开启,[并发邮件通知工作人员]

 1.使用os.system(命令)启用 服务。
 完整代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

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':<360>'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)

运行之后的效果:


评论 0

暂无评论
0
0
0
立即
投稿
发表
评论
返回
顶部