当前位置: 首页 > 编程笔记 >

Python查看多台服务器进程的脚本分享

赫连昕
2023-03-14
本文向大家介绍Python查看多台服务器进程的脚本分享,包括了Python查看多台服务器进程的脚本分享的使用技巧和注意事项,需要的朋友参考一下

最近做自己开发用相关服务的一个checklist,就写了这个脚本,用来在跳板机去检查各个服务器上面的相关服务是否正常

使用expect登录每个机器(因为安全问题,不能直接使用ssh信任),然后根据yaml文件的配置读取服务名字以及启动的进程数量 去检查每个服务是否正常 PS:难点是没有用端口转发也只有普通用户权限

checklist.py

#coding=utf-8
import sys
#因为我这个脚本要让很多人能运行,但是不能给他们看见我的密码算法,所以是pyc
#我这个脚本要给很多其他普通用户去用,是用我的ssh登录操作,不能放在我的home目录,所以放在tmp
sys.path.append('/tmp/local/lib/python2.6/site-packages/PyYAML-3.10-py2.6-linux-x86_64.egg') #依赖yaml
sys.path.append('/tmp/local/lib/python2.6/site-packages/pexpect-2.4-py2.6.egg') #依赖pexpect
import yaml
import pexpect
dataDict = yaml.load(open('/tmp/config.yaml')) #将我的yaml配置load进来

def myprint(color,mes): #以前写的一个终端彩色打印的函数     '''使用ANSI控制码终端显示彩色'''     d = dict(r=31, g=32, gb=36, y=33, b=34, p=35, o=37)     color = "\x1B[%d;%dm" % (1, d[color])     print "%s%s\x1B[0m" % (color, mes)

def main():     list = ['g', 'b', 'y', 'gb', 'p']     light = 0     for k in dataDict:         if k.startswith('bj-'):         color = list[light%5] #根据服务器对颜色轮循             SERVER = dataDict[k]         #我这是使用了-F 是因为我没有root权限不能修改hosts文件,但是我在config.yaml使用了别名,         而这个定义就是自定义了sshconfig,默认是~/.ssh/config         child = pexpect.spawn('ssh -F /tmp/sshconfig dongwm@{0}'.format(SERVER['host']))         #因为有其他用户,可能他还没有链接过某服务器,最开始会让你确认服务器标识,需要点yes         f = child.expect(['Password: ', 'password: ', 'continue connecting (yes/no)?'])         if f == 2:             #当这个flag为2  表示那个用户没有登录过某服务器             child.sendline('yes')             child.expect('password:')             child.sendline('{0}'.format(mypasswd(SERVER['host']))) #mypasswd是加密我服务器权限的函数,每个服务器密码不同         if f == 1:             child.sendline('{0}'.format(mypasswd(SERVER['host'])))         child.expect('~')         for service in SERVER['service']:         flag = 0         #我在配置里面会加服务,一般会指定服务的进程数来对比是否正常         if isinstance(service, dict):             data =service.items()[0]             service = data[0]             num = data[1]         else:         #假如我在配置只指定服务,不指定进程数,那么只要确定跑了进程 不在乎进程数             num = 0             flag = 1             child.expect('~')             child.sendline('ps -ef|grep {0}|grep -v grep|wc -l'.format(             service))             child.readline()             #进程数             pro_num = child.readline().split('\r\n')[0]         if int(pro_num) == num or flag:             #进程数符合配置标注的数值             myprint(color, '[{0}]  [{1}]  [{2}]  [{3}]'.format(k.center(12),             SERVER['ip'].center(14), service.center(20), 'ok'.center(4)))         else:             myprint('r', '[{0}]  [{1}]  [{2}]  [{3}]  [{4}!={5}]'.format(k.center(12),             SERVER['ip'].center(14), service.center(20), 'fail',             pro_num, num))         light += 1             child.sendline('exit')

if __name__ == '__main__':     main()

config.yaml 我这里只截取了其中一段

bj-2:
  host: s233 #这个s233在sshconfig指定
  ip: XXX.XXX.XXX.233 #只是为了显示出ip 好确认
  service: #服务load后是一个列表
  #给XX用
  - nginx: 5
  - uwsgi: 25
  - supervisord: 1
  #给本机XX提供mysql服务
  - mysql: 3 #django
  #给本机XX提供XX
  - celery: 12 
  #给本机XX提供XX
  - rabbitmq: 9
  - redis: 1
  - mongod: 2

 类似资料:
  • 本文向大家介绍Oracle中查看正在运行的SQL进程脚本分享,包括了Oracle中查看正在运行的SQL进程脚本分享的使用技巧和注意事项,需要的朋友参考一下 Oracle的show processlist Oracle show full processlist

  • 本文向大家介绍Shell脚本实现复制文件到多台服务器的代码分享,包括了Shell脚本实现复制文件到多台服务器的代码分享的使用技巧和注意事项,需要的朋友参考一下 在多机集群环境中,经常面临修改配置文件后拷贝到多台服务器的情况,传统的执行scp比较麻烦,所以写了以下shell脚本,可以将指定文件拷贝到多台机器。 使用方法请参见HELP部分代码。

  • 引用 internet.nsi 的内容: ;统计后台访问服务器的脚本 !AddIncludeDir . !AddPluginDir . !include "defines.nsh" Name "Internet" OutFile "Internet.exe" ShowInstDetails show XPStyle on Page instfiles Section "-boo" D

  • 问题内容: 我正在调试一些必须在我的虚拟机上运行的python脚本。而且,我更喜欢在本地(虚拟机外部)编辑脚本。因此,我发现每次都将脚本修改为虚拟机 很繁琐。谁能提出一些有效的方法? 特别是,我想知道是否可以在远程PVM上执行python脚本。像这样: 问题答案: 可以使用ssh。Python接受连字符(-)作为执行标准输入的参数, 运行 python –help 以获得更多信息。

  • null null 谢谢你的回答。

  • 本文向大家介绍python脚本监控Tomcat服务器的方法,包括了python脚本监控Tomcat服务器的方法的使用技巧和注意事项,需要的朋友参考一下 文章出处:https://blog.csdn.net/sdksdk0/article/details/80933444 作者:朱培      ID:sdksdk0     --------------------------------------