本文共 2287 字,大约阅读时间需要 7 分钟。
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #脚本用途:检测Activemq集群的端口监听情况及其队列通畅情况 #!/usr/bin/env python #coding=utf-8 import paramiko import time import sys import stomp Aip = ( "第一台mq服务器" ) Bip = ( "第二台mq服务器" ) Cip = ( "第三台mq服务器" ) list = [] def Checknetstat(): for i in (Aip,Bip,Cip): hostname =i username= "root" password= "服务器密码" #这里默认三台服务器的密码是一样的 paramiko.util.log_to_file( "syslogin.log" ) ssh =paramiko.SSHClient() ssh .load_system_host_keys() ssh .connect( hostname = hostname ,username=username,password=password) stdin,stdout,stderr= ssh .exec_command( "netstat -ntpl | grep 61613 | wc -l" ) word=str(stdout. read ().strip( '\n' )) #考虑一下这里为什么会有一个strip? list.append(word) #把for循环的结果变成一个list ssh .close() print list def GoListen(xip): class MyListener(object): def on_error(self, headers, message): print( 'received an error %s' % message) def on_message(self, headers, message): print( 'received a message %s' % message) conn = stomp.Connection([(xip,61613)]) conn.set_listener( '' , MyListener()) conn.start() conn.connect( 'mq的账户' , 'mq的密码' ) conn.subscribe(destination= '/queue/队列名称' , id =1, ack= 'auto' ) conn.send(body= '具体的消息内容' , destination= '/queue/队列名称' ) time . sleep (2) conn.disconnect() def Remotecommand(): if list == [ '1' , '0' , '0' ]: print ( "第一台机器的61613端口处于监听状态,现在尝试往里面发送消息..." ) try: GoListen(Aip) except stomp.exception.ConnectFailedException: print ( "发送信息失败,请重启Activemq进程..." ) elif list == [ '0' , '1' , '0' ]: print ( "第二台机器的61613端口处于监听状态,现在尝试往里面发送消息..." ) try: GoListen(Bip) except stomp.exception.ConnectFailedException: print ( "发送信息失败,请重启Activemq进程..." ) elif list == [ '0' , '0' , '1' ]: print ( "第三台机器的61613端口处于监听状态,现在尝试往里面发送消息..." ) try: GoLinten(Cip) except stomp.exception.ConnectFailedException: print ( "发送信息失败,请重启Activemq进程..." ) else : print ( "activemq的61613端口处于异常,现在重启这三台mq..." ) pass #这里可以单独写一个远程activemq重启的脚本 if __name__ == "__main__" : Checknetstat() Remotecommand() print( "整个脚本执行结束,感谢您的使用!" ) |
基本上来说,整个脚本的结构就是这样的,里面汉字的内容可以依照实际情况填写进去。
远程重启activemq脚本这里就不写了,跟远程查询61613端口的脚本一模一样,就是里面的命令改一下,所以在正常情况下启动本脚本的效果就是这样的:
或者是:
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1884415
转载地址:http://egeoa.baihongyu.com/